我有一个下拉列表,我想设置一个默认值,但我设置它的方式不适用于我在网上看到的所有示例。这是我获取字符串的控制器代码:
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上收到一个错误,说它对字符串文字来说太长了。
答案 0 :(得分:1)
问题是您的ViewBag
属性和您的模型属性的名称相同。当Razor呈现字段的值时,它会使用ModelState
中的数据。 ModelState
由ViewBag
,ViewData
,Request
和Model
的值组成,作为最后的手段。换句话说,由于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>)