我在视图中有DropDownList,如下所示,
@Html.DropDownListFor(model => model.RoleID, (IEnumerable<SelectListItem>)ViewBag.RoleID, new { @class = "dropdownlistCustom" })
@Html.DropDownList("RoleID", (IEnumerable<SelectListItem>)ViewBag.RoleID, new { @class = "dropdownlistCustom" })
@Html.ValidationMessageFor(model => model.RoleID)
尝试DropDownList
和DropDownListFor
,两者都没有得到正确的SelectedValue
。
从Controller,我设置selectedValue
参数(参见SelectList()的Last参数)。
public ActionResult Edit(int id = 0)
{
UserDetail userDetail=db.UserDetails.Find(id);
if(userDetail!=null)
{
ViewBag.RoleID = new SelectList(db.Roles.Where(r => r.RoleStatus == "A"), "RoleID", "RoleName", userdetail.RoleID);
return View(userdetail);
}
}
型号:
[Display(Name = "Name Of the Role")]
public int RoleID { get; set; }
[ForeignKey("RoleID")]
public virtual Role Roles { get; set; }
答案 0 :(得分:1)
首先,我建议您不要使用ViewBag ,但要查看模型以将您的选择列表(或选择列表的数据)从控制器传递到视图。
其次,我建议您查看DropDownListFor
使用的at this example或this example(最好是两者)。我认为你过于复杂SelectList
。它不那么简单,你会更加困惑,为什么它没有按预期工作。只需获取现有示例并将变量名称更改为您的名称。
为什么不使用ViewBag
的另一个重要提示是,在构建视图模型时,您可以在控制器中构建一个选择列表,您可以从任何地方获取数据。然后在视图中,您只需要使用预先构建的视图模型属性,其中提供了SelectList
参数 - 更清晰,更好。 View应该对数据进行最少的操作,但只能以正确的方式在正确的位置以正确的格式呈现。
看看我提供的那些例子,我相信你足够聪明,能够弄清楚如何正确使用DropDownListFor
,它非常简单,你只需要在正确的位置提供正确的参数,看看是什么其他人也这样做。
希望这有帮助,请告诉我您的进度。
答案 1 :(得分:0)
那是因为你没有正确使用DropDownListFor
。你所追求的功能定义是:
DropDownListFor(lambda, selectList, *selectedItem*, htmlAttributes)
RoleId
应作为selectedItem
参数传递,因此您缺少selectList
参数。 MVC不会使用DropDownListFor
自动为您创建,您必须通过内联创建,将其传递到ViewBag
或在模型上设置并指定哪个属性来告诉它使用哪个选择列表使用。
修改强>
对不起。那是我的坏事。现在还早,我们失去了一个小时(夏令时),所以我的大脑还没到那里。我混合了DropDownListFor
和DropDownList
。使用DropDownListFor
时,所选项目来自模型上的设置值,但您仍需要提供正确的SelectList
。您似乎正在尝试指定所选项目,您应告诉它应使用SelectList
。
如果您要使用DropDownList
,则需要指定要使用的SelectList
和所选值。