超文本标记语言下拉列表所选值不工作



在我的项目,Html。下拉列表无法显示其选定的值。它显示列表的初始值。我的控制器和视图代码如下:

控制器:

public ActionResult Edit(int id = 0)
    {
        PERMISSION permission = permissionManager.Find(id);
        ViewBag.MODULE_ID = new SelectList(moduleManager.GetAll(), "ID", "TITLE",permission.MODULE_ID);
        return View(permission);
    }

视图:

@Html.DropDownList("MODULE_ID", (IEnumerable<SelectListItem>)@ViewBag.MODULE_ID, new { @class = "form-control" })

但是如果我写:

@Html.DropDownList("MODULE_ID", String.Empty)

很好。但我必须添加class="form-control"。解决方案是什么?
更新:
我已经从ViewBag更改了ViewBag的名称。MODULE_ID到ViewBag.ModuleList。它可能与下拉列表的名称冲突。

我已经从ViewBag更改了ViewBag的名称。MODULE_ID到ViewBag.ModuleList。它可能与下拉列表的名称冲突。

在错误的参数中添加form-control类。当前它被添加为选项标签。

使用:

@Html.DropDownList("MODULE_ID", (IEnumerable<SelectListItem>)@ViewBag.MODULE_ID, "-- Select --",  new { @class = "form-control" })

附带说明,您应该考虑使用ViewModel类,并取消魔术字符串"MODULE_ID"ViewBag魔术属性。ViewModel类允许您在不强制转换的情况下对事物进行强命名,如下所示:

@Html.DropDownListFor(model => model.MODULE_ID, Model.Modules, "-- Select --", new { @class = "form-control" })

这是一个微妙的变化,但一切都是编译时检查。

根据之前的解决方案,什么对我有效:在控制器:

ViewBag.VCenter = new SelectList(db.VirtualMachinesData.Where(x => x.IsVCenter == true).ToList(), "Id", "IPAddress","80"); ;
在视图:

@Html.DropDownList("v", (IEnumerable<SelectListItem>)@ViewBag.VCenter, new { @class = "form-control" })

重要提示:下拉列表的名称"v"-必须与viewbag的名称"VCenter"-不同,如果名称相同则不起作用

最新更新