Привязка модели 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

Другие вопросы по тегам