DropDownList未被选中 - MVC4

时间:2013-03-11 12:49:00

标签: asp.net-mvc asp.net-mvc-4 html.dropdownlistfor list.selectedvalue

我在视图中有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)

尝试DropDownListDropDownListFor,两者都没有得到正确的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; }

2 个答案:

答案 0 :(得分:1)

首先,我建议您不要使用ViewBag ,但要查看模型以将您的选择列表(或选择列表的数据)从控制器传递到视图。

其次,我建议您查看DropDownListFor使用的at this examplethis example(最好是两者)。我认为你过于复杂SelectList。它不那么简单,你会更加困惑,为什么它没有按预期工作。只需获取现有示例并将变量名称更改为您的名称。

为什么不使用ViewBag 的另一个重要提示是,在构建视图模型时,您可以在控制器中构建一个选择列表,您可以从任何地方获取数据。然后在视图中,您只需要使用预先构建的视图模型属性,其中提供了SelectList参数 - 更清晰,更好。 View应该对数据进行最少的操作,但只能以正确的方式在正确的位置以正确的格式呈现。

看看我提供的那些例子,我相信你足够聪明,能够弄清楚如何正确使用DropDownListFor,它非常简单,你只需要在正确的位置提供正确的参数,看看是什么其他人也这样做。

希望这有帮助,请告诉我您的进度。

答案 1 :(得分:0)

那是因为你没有正确使用DropDownListFor。你所追求的功能定义是:

DropDownListFor(lambda, selectList, *selectedItem*, htmlAttributes)

RoleId应作为selectedItem参数传递,因此您缺少selectList参数。 MVC不会使用DropDownListFor自动为您创建,您必须通过内联创建,将其传递到ViewBag或在模型上设置并指定哪个属性来告诉它使用哪个选择列表使用。

修改

对不起。那是我的坏事。现在还早,我们失去了一个小时(夏令时),所以我的大脑还没到那里。我混合了DropDownListForDropDownList。使用DropDownListFor时,所选项目来自模型上的设置值,但您仍需要提供正确的SelectList。您似乎正在尝试指定所选项目,您应告诉它应使用SelectList

如果您要使用DropDownList,则需要指定要使用的SelectList和所选值。