使用ViewModel中的数据填充@ Html.DropDownListFor

时间:2019-02-22 14:34:22

标签: c# model-view-controller

我有用于向用户添加角色的工作代码。现在,我想用应用程序中的可用(所有)角色替换下拉列表中的文本输入。我现在有了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中添加其他位置以存储结果?

1 个答案:

答案 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