我的模型链接数据库中的2个表,因此我需要允许我的用户在主表中创建新记录时选择辅助表中的项目。
我要关联的表格是Roles
和Users
对于用户角色,当您创建新用户记录时,您将从下拉列表中选择一个角色。用户模型看起来总结如下:
public int Id { get; set; }
public int RoleId { get; set; }
public Role Role { get; set; }
public string Username { get; set; }
...
在表单上,您将从下拉列表中选择一个角色,该角色将为您提供RoleId的值,然后可以使用该值从数据库中选择角色:
@Html.DropDownList("RoleId", "Please select a user role.")
我遇到的问题(尽管我已经在另一个项目中使用了我已经复制了代码),显然没有<select>
元素的查看数据。
下面的实际错误文字:
System.Web.Mvc.dll中发生了'System.InvalidOperationException'类型的异常,但未在用户代码中处理
附加信息:没有类型为'IEnumerable'的ViewData项具有键'RoleId'。
知道我在这里做错了吗?
答案 0 :(得分:1)
您正在使用.DropDownList
的无效重载。没有签名只需要两个字符串。您必须指定生成选择列表时要使用的值。
使用IEnumerable<SelectListItem>
中的重载。例如:
@Html.DropDownList("RoleId", Model.ListOfRoles, "Please select a user role.")
如果您要创建新列表,可以使用ViewBag:
// SelectList(List<Role>, "Data Value Field", "Data Text Field");
ViewBag.RoleId = new SelectList(db.Roles, "RoleId", "RoleName");
@Html.DropDownList("RoleId", "Please select a role for this user")