我有用于向用户添加角色的工作代码。现在,我想用应用程序中的可用(所有)角色替换下拉列表中的文本输入。我现在有了html标签 @ Html.DropDownListFor ,所以我创建了一个新ViewView,其中包含我需要的所有数据,但是现在我陷入了困境。我尝试使用foreach并填充列表中每个项目的数据,但此方法不起作用。尝试使用@ Htm.DropDownListFor具有相同的效果。有人可以告诉我正确的方法吗?谢谢!
控制器:
public async Task<IActionResult> AddRoleToUser(string id, string role)
{
var user = await _userManager.FindByIdAsync(id);
if (await _roleManager.RoleExistsAsync(role))
{
await _userManager.AddToRoleAsync(user, role);
}
return RedirectToAction("UserGroups", new { id });
}
ViewModel:
public class UserGroupsViewModel
{
public ApplicationUser ApplicationUser { get; set; }
public IList<string> RolesList { get; set; }
public IQueryable<ApplicationRole> AllRoles { get; set; }
}
查看
@model AdminMVC.Models.Admin.UserGroupsViewModel
@using (Html.BeginForm("AddRoleToUser", "Admin", new { id = Model.ApplicationUser.Id }))
{
<div classs="input-group">
<p><b>Name new role for user:</b></p>
<input class="form-control form-control-sm" type="text" name="role" placeholder="Role name">
<span class="input-group-btn">
<input type="submit" value="Add Role" class="btn btn-primary btn-sm" />
</span>
</div>
}
我的问题已被确定可能与另一个问题重复。但是我看到了这个问题,但仍然做不到。 我可以将IList更改为包含两个值id和string的列表吗?并在viewmodel中添加其他位置以存储结果?
答案 0 :(得分:1)
将RolesList更改为SelectList
并添加role
属性:
public SelectList RolesList { get; set; }
public string Role{get;set;}
使用
构建SelectList
model.RolesList = new SelectList(listOfRoles);
然后您认为
@Html.DropDownListFor(x => x.Role, Model.RolesList)
如果一切正常,则您的帖子应包含填充的role
。