Привязка модели mvc asp.net не работает для выпадающего списка в режиме редактирования
Почему механизм связывания не работает в выпадающем списке в режиме редактирования?
в режиме редактирования я пишу этот код и тестирую два разных ddl:
@Html.DropDownList("ProductParentCategoryId", null, htmlAttributes: new { @class = "form-control" })
@Html.DropDownListFor(model => model.ProductParentCategoryId, (SelectList)ViewBag.ParentId)
и в моем контроллере
ViewBag.ProductParentCategoryId = new SelectList(_productCategoryService.GetAllProductCategory(), "ProductCategoryId", "ProductCategoryTitle");
ViewBag.ParentId = new SelectList(_productCategoryService.GetAllProductCategory(), "ProductCategoryId", "ProductCategoryTitle");
но все текстовые поля в режиме редактирования заполняются подшивкой модели, но не раскрываются в выпадающем списке.
-------Обновить-------
Я имею в виду, что в режиме редактирования связыватель модели связывает все данные из базы данных в текстовое поле и каждый элемент... но в раскрывающемся списке связыватель модели не связывает данные из базы данных как выбранное значение в раскрывающийся список
2 ответа
Я нахожу свое решение Единственное, что должно быть сделано в моем контроллере:
[http Get]
public ActionResult Edit(int id)
{
var selectedId = _productCategoryService.GetOneProductCategory(id);
ViewBag.ProductParentCategoryId = new SelectList(_productCategoryService.GetAllProductCategory(), "ProductCategoryId", "ProductCategoryTitle", (int)selectedId.ProductParentCategoryId);
ViewBag.GroupFiltersId = new SelectList(_groupFiltersService.GetAllGroupFilter().Where(a => a.GroupFilterParentId == null), "GroupFilterId", "GroupFilterTitle");
return View(_productCategoryService.GetOneProductCategory(id));
}
Посмотреть:
@Html.DropDownList("ProductParentCategoryId", null, htmlAttributes: new { @class = "form-control" })
Я бы посоветовал вам привязаться к модели представления и не использовать ViewBag.
Но чтобы ответить на ваш вопрос, в первом примере вы не передали элементы для заполнения раскрывающегося списка (второй параметр), вместо этого вы передали нулевое значение.
Также для выпадающих я всегда использовал IEnumerable<SelectListItem>
в отличие от коллекции SelectList.
Таким образом, в вашей модели представления вы можете создать свойство как: public IEnumerable<ProductCategory> ProductCategories {get; set;}
и свяжите это со своим выпадающим списком следующим образом:
Html.DropDownListFor(m => m.ProductCategoryId, Model.ProductCategories)
https://msdn.microsoft.com/en-us/library/gg548304(v=vs.111).aspx