为什么我得到一个错误,说没有's视图数据为我的下拉列表

本文关键字:视图 下拉列表 我的 数据 错误 一个 为什么 | 更新日期: 2023-09-27 18:05:25

我的模型链接了数据库中的2个表,所以我需要允许我的用户在主表中创建新记录时选择从表中的项。

我要链接的表是RolesUsers

对于用户角色,当您创建一个新的用户记录时,您将从下拉列表中选择一个角色。用户模型看起来像这样:

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 '的异常。InvalidOperationException'在System.Web.Mvc.dll中发生,但未在用户代码中处理

附加信息:没有'IEnumerable'类型的ViewData项具有'RoleId'键。

你知道我哪里做错了吗?

为什么我得到一个错误,说没有's视图数据为我的下拉列表

您正在为.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")