asp.net mvc model binder在编辑模式下不适用于下拉列表

时间:2017-02-20 19:10:25

标签: c# asp.net asp.net-mvc asp.net-mvc-5 modelbinder

为什么模型绑定器在编辑模式下的下拉列表中不起作用?

在编辑视图中我编写此代码并测试两个不同的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");

但是编辑模式下的所有文本框都填充了模型绑定器,但不会出现在下拉列表中。

为什么?  enter image description here

------- -------更新

我的意思是处于编辑模式,模型绑定器绑定文本框中的数据库中的所有数据和每个元素...... 但是在dropdownlist中,模型绑定器不会将数据从数据库绑定为选定值到下拉列表中

2 个答案:

答案 0 :(得分:0)

我建议您绑定到视图模型而不使用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

答案 1 :(得分:0)

我找到了解决方案 应该在我的控制器中完成唯一的事情:

[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" })