【发布时间】:2021-07-08 23:53:00
【问题描述】:
所以我想要做的是我有一个角色数据库表,我想在下拉列表中显示,并将值发送到不同的控制器函数。但是,当我尝试执行此操作时,我没有收到从下拉列表中选择的新角色的值,而是收到之前在我的模型中的值。 这是我的 CSHTML 代码:
@model IEnumerable<OnlineStoreData.Model.User>
<h4>List of Users: </h4>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.UserName)
</th>
<th></th>
</tr>
@foreach (var user in Model) {
if (user.Role.RoleName.TrimEnd(' ') == "User")
{
<tr>
<td>
@Html.DisplayFor(modelItem => user.UserName)
</td>
<td>
@Html.DropDownListFor(modelItem => user.Role.RoleName, new SelectList(ViewBag.RoleList)) //Here I need to select a new Role, for example "Admin"
@Html.ActionLink("Promote", "Promote", new { id = user.UserId, role = user.Role.RoleName }) |
@Html.ActionLink("Delete", "Delete", new { id = user.UserId })
</td>
</tr>
}
}
</table>
这是我的控制器的代码
public ActionResult ManageUsers()
{
ViewBag.RoleList = storeDBEntities.Roles.Select(role => role.RoleName).ToList();
return View(storeDBEntities.Users.ToList());
}
public ActionResult Promote(int id, string role)
{
//Here I should get the new role selected in the dropdown list, but I keep getting "User", which is the old role.
User toPromUser = storeDBEntities.Users.Find(id);
Role newRole = storeDBEntities.Roles.FirstOrDefault(r => r.RoleName == role);
if(toPromUser != null && newRole != null)
{
toPromUser.Role = newRole;
toPromUser.UserRole = newRole.RoleId;
storeDBEntities.SaveChanges();
}
return RedirectToAction("ManageUsers", "Users");
}
我不确定我应该如何解决这个问题以使代码执行预期的操作。谢谢。
【问题讨论】:
标签: asp.net-mvc razor dropdown