ورود

View Full Version : ارسال چندین پارامتر



raha raad
چهارشنبه 01 شهریور 1396, 11:30 صبح
با سلام و ادب.
من می خوام چندین پارامتر را از View دریافت کرده و به عنوان آرگومانهای ورودی به یک اکشن بفرستم. جستجویی که کردم ازطریق Routing پارامترها را تعیین و با ViewBag پاس میده. من می خوام دو تا Guid که یکی اختیاری و دیگری الزامیست را ارسال کنم ولی اینکار را انجام نمیده!!! و در نوار آدرس & که برای جداکردن پارامترها میاد، ظاهر نمی شه!! و همه را دنبال هم میاره. ممنون میشم راهنماییم کنید.

Moien Tajik
چهارشنبه 01 شهریور 1396, 13:02 عصر
یک مدل براش درست کنید که فیلد اول از نوع GUID که Required هست و فیلد دوم که Nullable هست .
داخل فرمتون این مدل رو به اکشنتون Submit کنید .

raha raad
دوشنبه 06 شهریور 1396, 09:56 صبح
مدل من مربوط به کامنته. وقتی کاربر کامنتی می نویسه، آی دی والد null است. تا اینجای کار درست عمل می کنه ولی وقتی می خوام برای یک کامنت پاسخ درج کنم در ارسال آی دیها_آی دی والد و کامنتی که پاسخ مربوط به آن است_ با مشکل مواجه می شم.
آیا لازم است یک اکشن جدید مربوط به ارسال پاسخ کامنت هم ایجاد کنم؟
بازهم مشکلم در ارسال بیش از یک پارامتر است. لطف می کنید اگر یک کد نمونه بگذارید.

Moien Tajik
دوشنبه 06 شهریور 1396, 22:48 عصر
شما بعنوان ورودی ، لیستی از ID ها بگیرید ، اگر تعداد آیتم های لیست برابر 2 بود یعنی پاسخ به کامنت هست ، آیتم اول کامنت و دوم پاسخ به کامنت .
اگر 1 بود یعنی خودش کامنت اصلی هستش .

raha raad
چهارشنبه 08 شهریور 1396, 10:08 صبح
شاید با سوالم کلافتون کرده باشم ولی لططفا صبوری کنید.
این موردی که فرمودید رو قبلا چک کردم و ایرادی در آن نیست. مساله در ایجاد پاسخ کامنته که نمی دونم چطور در مدل ذخیره اش کنم در حالیکه هر دو آی دی رو پشت هم ارسال می کنه در کوئری استرینگ.
وقتی روی لینک "پاسخ" برای یک کامنت می زنم، فرم مربوطه میاد و پاسخ نوشته می شه. وقتی دکمه submit را می زنم انتظار دارم که این پاسخ برای پاسخ کامنت مورد نظرم ثبت بشه که اینطور نمی شه. همانطور که قبلا عرض کردم هر دو آی دی را پشت هم میاره.مثلا:
id=90parentid=100
یعنی & را نمیاره!!!! که پارامترها را از هم تفکیک بکند و بفهمه دوتا پارامتره. بنابراین پیام خطا میده که آی دی که اجباریست برابر با null است.

Moien Tajik
چهارشنبه 08 شهریور 1396, 10:54 صبح
کد ویو و کنترلرتون رو بفرستید.
این آموزش رو هم بررسی کنید : http://bit.do/MakeCommentsMVC

raha raad
سه شنبه 14 شهریور 1396, 09:50 صبح
ویو مدل:

public class Comment_ViewModel { public Comment_ViewModel() { Id = Guid.NewGuid(); InsertDateTime = DateTime.Now; }
/// <summary> /// کد يکتايي نظر /// </summary> //**************************** [Display(Name = "کد يکتايي", Order = 10000)] //**************************** public Guid Id { get; set; }

/// <summary> /// کليد والد پيام /// </summary> //***************************************** [Display(Name = "کد يکتايي والد", Order = 10000)] //[Editable(false)] //***************************************** public Guid? ParentId { get; set; }

/// <summary> /// آي دي پست يا کالايي که نظر براي آن ثبت خواهد شد /// </summary> //***************************************** [Required] [Editable(false)] [Display(Name = "کد يکتايي کالا", Order = 10000)] //***************************************** public Guid ProductId { get; set; }

/// <summary> /// نام کاربر نظر دهنده /// </summary> //***************************************** [Required] [StringLength(maximumLength: 20)] [Editable(false)] [Display(Name = "نام", Order = 10000)] //***************************************** public string Name { get; set; }

/// <summary> /// ايميل کاربر نظر دهنده /// </summary> //***************************************** [Required] [Editable(false)] [DataType(dataType: DataType.EmailAddress)] [Display(Name = "ايميل", Order = 10000)] //***************************************** public string Email { get; set; }

/// <summary> /// نظر کاربر /// </summary> //***************************************** [Required] [StringLength(maximumLength: 100)] [DataType(dataType: DataType.MultilineText)] [Display(Name = "نظر", Order = 10000)] //***************************************** public string CommentBox { get; set; }

/// <summary> /// در حال نمايش بودن يا نبودن نظر /// </summary> //***************************************** [Display(Name = "فعال؟", Order = 10000)] //***************************************** public bool CommentIsActive { get; set; }

/// <summary> /// تاريخ و ساعت ثبت نظر /// </summary> //***************************************** [ScaffoldColumn(false)] [Display(Name = "تاريخ و ساعت ثبت نظر", Order = 10000)] [Editable(false)] //***************************************** public DateTime InsertDateTime { get; set; }
}

جاییکه قراره پارامترها ارسال شود:




<div class="panel panel-default" style="margin-top:30px;"> <div class="panel-heading"> <h2>ليست نظرات فعال</h2> </div> <table class="table table-striped" style="overflow:auto"> <thead> <tr> <th class="label-in-table"> @Html.DisplayNameFor(model => model.Name) </th> <th class="label-in-table"> @Html.DisplayNameFor(model => model.Email) </th> <th class="label-in-table"> @Html.DisplayNameFor(model => model.CommentBox) </th> @*<th class="label-in-table"> @Html.DisplayNameFor(model => model.CommentIsActive) </th>*@ <th class="label-in-table"> @Html.DisplayNameFor(model => model.InsertDateTime) </th> <th></th> </tr> </thead> <tbody> @if (Model.Where(m=>m.CommentIsActive==true).Count() == 0) { <tr> <td colspan="6" class="text-center labels"> هيچکدام از نظرات فعال نيستند</td> </tr> } else { foreach (var item in Model) { if (item.CommentIsActive == true) { <tr> <td class="label-in-table"> @Html.DisplayFor(modelItem => item.Name) </td> <td class="label-in-table"> @Html.DisplayFor(modelItem => item.Email) </td> <td class="label-in-table"> @Html.DisplayFor(modelItem => item.CommentBox) </td> @*<td class="label-in-table"> @Html.DisplayFor(modelItem => item.CommentIsActive) </td>*@ <td class="label-in-table"> @Html.DisplayFor(modelItem => item.InsertDateTime) </td> <td> @Html.ActionLink("ويرايش", "Edit", new { id = item.Id }, new { @class = "anchors" }) | @Html.ActionLink("جزييات", "Details", new { id = item.Id }, new { @class = "anchors" }) | @Html.ActionLink("حذف", "Delete", new { id = item.Id }, new { @class = "anchors" }) | @{ ViewBag.Id = Guid.NewGuid(); ViewBag.Parameters = "parentId=" + item.Id + "&&id=" + ViewBag.Id; } @Html.ActionLink("پاسخ", "Create", "Comments", new { @ViewBag.Parameters }, new { @class = "anchors"}) @*چطور بيشتر از يک پارامتر را کوري استرينگ ارسال کنم؟ , id =_id, parentId = item.Id *@ </td> </tr> }
} } </tbody> </table>
</div>
<script type="text/javascript"> $(document).ready(function () { $("[id*=btnReply]").each(function () { $(this).click(function () { var commentid = $(this).attr("id").match(/[\d]+$/); $("#ParentId").val(commentid); }); }); });</script>

روت کانفیگ:


routes.MapRoute( name: "Create", url: "{controller}/{action}/{parentId}/{id}", defaults: new { controller = "Comments", action = "Create", parentId= UrlParameter.Optional ,id= 000000000-0000-0000-0000-000000000000 } );

کد اکشن مورد نظر:



public ActionResult Create(Guid? parentId,Guid id)
{
var viewModel = new Comment_ViewModel();
viewModel.ParentId = parentId;
viewModel.ProductId = id;
viewModel.Email = UserManager.GetEmail(User.Identity.GetUserId());
viewModel.Name= User.Identity.GetUserName();
//***
//ViewBag.ProductId = id;
//ViewBag.ParentId = parentId;

return View(viewModel);
}

raha raad
جمعه 17 شهریور 1396, 08:01 صبح
شرمندم نمی دونم چطور باید کدهام رو بذارم که مرتب نشون بده!!

mr.sirwan
جمعه 17 شهریور 1396, 11:26 صبح
با سلام دوست عزیز، من کدتونو بررسی کردم اصلا نیازی به این دردسرا نیس، شما اومدین واسه پاس دادن پارامتر ها از ViewBag استفاده کردین که اصلا لزومی نداره، شما فقط به جای دو خط زیر:
@{ViewBag.Id = Guid.NewGuid(); ViewBag.Parameters = "parentId=" + item.Id + "&&id=" + ViewBag.Id;}
@Html.ActionLink("پاسخ", "Create", "Comments", new { @ViewBag.Parameters }, new { @class = "anchors" })

این خط رو جایگزین کنین:

@Html.ActionLink("پاسخ", "Create", "Comments", new { parentId = item.id, id = Guid.NewGuid() }, new { @class = "anchors" })

راه درست ارسال پارامتر به اکشن اینجوری هستش، ببینین مشکل رفع میشه یا خیر