在视图中为下拉列表设置默认值

时间:2015-07-22 17:34:18

标签: c# asp.net-mvc visual-studio

我有一个下拉列表,我想设置一个默认值,但我设置它的方式不适用于我在网上看到的所有示例。这是我获取字符串的控制器代码:

ViewBag.RoleId = new SelectList(db.Roles, "RoleId", "RoleDescription");

然后,这是我在视图中的下拉列表的代码:

@Html.DropDownList("RoleId", null, "Select Role", htmlAttributes: new { @class = "form-control" })

我想将该下拉列表设置为默认为用户角色,但我无法理解。

以下是我的模型中我的roleID的代码,试图设置默认值:

[Display(Name = "Role")]
[Required]
[DefaultValue('B2323674-45DC-45E7-91D2-E635CF63C04A')]
[ForeignKey("Role")]
public Guid RoleID { get; set; }

问题是我在Guid Default上收到一个错误,说它对字符串文字来说太长了。

2 个答案:

答案 0 :(得分:1)

问题是您的ViewBag属性和您的模型属性的名称相同。当Razor呈现字段的值时,它会使用ModelState中的数据。 ModelStateViewBagViewDataRequestModel的值组成,作为最后的手段。换句话说,由于ViewBag属性和Model属性的名称相同,因此您基本上说RoleId的选定值是整个SelectList },这显然不是你想要的。

最简单的解决方案是简单地将ViewBag属性命名为其他内容,例如ViewBag.RoleIdChoices。然后,你会没事的。

答案 1 :(得分:0)

这里发生了一些事情。

您无法将dropDownList绑定到ViewBag集合"无法动态调度扩展方法。"这意味着,您需要将SelectList包含在模型中。

您可以在SelectList中设置SelectedValue

ViewBag.RoleId = new SelectList(db.Roles, "RoleId", "RoleDescription", <DefaultRoleObj>);

您需要在DropDownList中包含对selectList的引用

@Html.DropDownList("RoleId", <Model.SelectList>)