با سلام
در نظر دارم یک دراپ دان لیست درست کنم با توجه به آیتم انتخاب شده id آیتم انتخاب شده را در کنترلری که از نوع post ذخیره کنم اما زمانی که یکی از آیتمهای دراپ دان لیست انتخاب می کنم و دکمه موجود در فرم کلیک می کنم خطای زیز نمایش داده می شود
یک ویومدل دارم به صورت زیر است
public class showproductViewModel { public Product producted { get; set; } public List<System.Web.Mvc.SelectListItem> VehicleMakeList { get; set; }
,و در کنترلر به صورت زیر دراپ دان لیست پر می کنم
[HttpGet] public ActionResult list() { try { showproductViewModel nnn = new showproductViewModel(); var t = db.Groups.ToList(); nnn.ddd = t; return View(nnn); { } [HttpPost] public ActionResult list(showproductViewModel t) { ذخیره id آیتم {
و در View به صورت زیر دراپ دان لیست نمایش می دهم
@Html.LabelFor(model => model.producted.GroupId, new { @class = "label" }) <div class="controls"> @Html.DropDownListFor(x => x.producted.GroupId, new SelectList(Model.ddd, "Id", "Name"))
آیا نحوه پر کردن dropdwonlist اشتباه است
علت خطا چیست
چرا براش Propery ایجاد کردید
میتونستید از ViewBag استفاده کنید
از ViewBag استفاده می کنم خطای زیر نمایش می دهد چگونه با ویو مدل دراپ دان لیست پر کنم و id آیتم انتخاب شده را بدست آورم
لطفا راهنمایی بفرمایید
با سلام
برای استفاده از ViewBag در helper از دستور زیر استفاده کنید...
ViewBag.Category as List<SelectListItem>
کد زیر را در کنترلر نوشتم
var t = db.Groups.ToList(); ViewBag.Categories = new SelectList(t, "Id", "Name");
و در view کد زیر نوشتم
@Html.DropDownListFor(model => model.producted.GroupId, ViewBag.Categories as List<SelectListItem>, "یکی از گزینه ها را انتخاب نمایید")
اما خطای پست 3 نمایش می دهد علت نمایش خطا چیست؟؟
model.produced.GroupId خالی است
می خواهم زمانی که یکی از آیتمهای دراپ دان لیست انتخاب کردم id آیتم انتخاب شده در model.produced.GroupId قرار بگیرد تا بتوانم id آیتم انتخاب شده در دیتابیس ذخیره کنم
در زمان POST صفحه ، خطای پست 3 رو نشون میده یا در زمان GET ؟؟
در زمان GET
ویو بگ را به صورت زیر پر کنید :
SelectListItem a = new SelectListItem(); List<SelectListItem> source = new List<SelectListItem>(); foreach (var item in db.Categories.ToList()) { source.Add(new SelectListItem() { Text = item.Name, Value = item.Id.ToString() }); } ViewBag.Categories= source;
به وسیله دستورات پست قبل صفحه در زمان Getبدون هیچ خطایی نمایش داده می شود
اما در زمان POST صفحه خطای پست 3 نمایش داده می شود
var x = ViewBag.Category as List<SelectListItem>; @Html.DropDownList("Category", x) ViewBag.Category as List<SelectListItem>
من از این دستور استفاده می کنم و در POST با استفاده از String Category مقدار(Value) انتخاب شده را استفاده می کنم.
ولی دقت داشته باشید اگر قرار از ViewModel استفاده کنید باید قبل از ModelState.IsValid مقدار GroupId رو به مدل بدید که مدل ورودی Valid باشه ، همچنین تو این روش از هلپر DropDownList بجای DropDownListFor استفاده شده...
قسمت زیر در کجا باید بنویسیم در اکشن post یا اکشن get
var x = ViewBag.Category as List<SelectListItem>;
قسمت زیر در کجا باید بنویسیم در اکشن post یا اکشن get
ViewBag.Category as List<SelectListItem>
var x = ViewBag.Category as List<SelectListItem>; @Html.DropDownList("Category", x)
قسمت بالا را در View به صورت مقابل : @{کد بالا } قرار بدید ، و در متد Post از پارامتری با نوع string و نام Category قرار بدید ، هنگامی که صفحه پست میشه ، مقدار انتخاب شده در متغییر قرار میگیره...
دستورات به صورت زیر نوشتم خطای پست 3 نمایش می دهد
List<selectlistitem> source = new List<selectlistitem> (); foreach (var item in db.Groups.ToList()) { source.Add(new SelectListItem() { Text = item.Name, Value = item.Id.ToString() }); } ViewBag.Categories = source; @{var x = ViewBag.Categories as List<SelectListItem>;} @Html.DropDownList("Categories", x)
این دو مقاله ای که لینک دادم را مطالعه کنید ، نمونه هم دارند ، احتمالا مشکلتون برطرف میشه :
فکر میکنم مشکل ازین باشه که در برگشت شما ، DropDown رو پر نکردید ، یعنی به همون صورتی که در متد گت ، DropDown رو پر کردید در پست هم پر کنید...
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)