C# 使用IEnumerable SelectList的下拉菜单
当我试图从下拉列表中选择一个项目并提交此项目时,出现以下错误 中发生“System.InvalidOperationException”类型的异常 System.Web.Mvc.dll,但未在用户代码中处理 信息:没有类型为的ViewData项 具有键“RoleName”的“IEnumerable” 如果有人能帮我找出如何修复这个错误,我会非常感激,因为我还没有能够修复它,并且已经被困了很长时间,而谷歌还没有提供解决方案 这是我的控制器代码C# 使用IEnumerable SelectList的下拉菜单,c#,html,asp.net,asp.net-mvc,C#,Html,Asp.net,Asp.net Mvc,当我试图从下拉列表中选择一个项目并提交此项目时,出现以下错误 中发生“System.InvalidOperationException”类型的异常 System.Web.Mvc.dll,但未在用户代码中处理 信息:没有类型为的ViewData项 具有键“RoleName”的“IEnumerable” 如果有人能帮我找出如何修复这个错误,我会非常感激,因为我还没有能够修复它,并且已经被困了很长时间,而谷歌还没有提供解决方案 这是我的控制器代码 [AllowAnonymous] pu
[AllowAnonymous]
public ActionResult Index()
{
var roles = context.Roles.ToList();
return View(roles);
}
[Authorize(Roles = "canEdit")]
public ActionResult ManageUserRoles()
{
var list = context.
Roles.OrderBy(r => r.Name).ToList().Select(rr => new SelectListItem { Value = rr.Name.ToString(), Text = rr.Name }).ToList();
ViewBag.Roles = list;
return View();
}
public ActionResult RoleAddToUser(string UserName, string RoleName)
{
ApplicationUser user = context.Users.FirstOrDefault(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase));
if (user != null)
{
UserManager.AddToRole(user.Id, RoleName);
}
return View("ManageUserRoles");
}
这是我的ManageUserRoles视图
@{
ViewBag.Title = "ManageUserRoles";
}
<h2>Manage User Roles</h2>
@Html.ActionLink("Create New Role", "Create") | @Html.ActionLink("View User Roles", "Index")
<hr />
<h2>Role Add to User</h2>
@using (Html.BeginForm("RoleAddToUser", "Roles"))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<p>
User Name : @Html.TextBox("UserName")
Role Name: @Html.DropDownList("RoleName", (IEnumerable<SelectListItem>) ViewBag.Roles, "Select ...")
</p>
<input type="submit" value="Save" />
}
<hr />
@{
ViewBag.Title=“ManageUserRoles”;
}
管理用户角色
@Html.ActionLink(“创建新角色”、“创建”)|@Html.ActionLink(“查看用户角色”、“索引”)
角色添加到用户
@使用(Html.BeginForm(“RoleAddToUser”、“Roles”))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
用户名:@Html.TextBox(“用户名”)
角色名称:@Html.DropDownList(“RoleName”,(IEnumerable)ViewBag.Roles,“选择…”)
}
验证您的模型(无论是域模型还是其他视图模型)是否具有名为“RoleName”的字符串类型字段,这需要与DropDownList调用的第一个参数匹配,以便页面知道在表单提交时将数据发布回哪个变量 问题是(我假设)您是从ActionResult RoleAddToUser而不是从ManageUserRoles访问视图(“ManageUserRoles”)。因此ViewBag不存在
return View("ManageUserRoles");
开始渲染视图。但是在视图上,您有一个下拉列表,它需要ViewBag.Roles。。。但是在哪里设置数据?引发此异常是因为ViewBag.Roles不存在
如果要在返回视图之前运行ActionResult ManageUserRoles,则必须调用redirect
return RedirectToAction("ManageUserRoles");
如果希望在该方法中呈现视图而不执行代码,则必须在RoleAddToUser中创建ViewBag.Roles。请注意,每次请求后都会删除ViewBag数据 我已经检查了我的模型,该字段名为Name而不是RoleName,但是在将RoleName的所有引用更改为Name之后,我仍然收到相同的错误,您在哪里将角色添加到ViewBag?这就解决了问题,非常感谢您的帮助@Ademar