显示从db到dropdownlist的所有角色

时间:2013-10-12 07:22:29

标签: asp.net-mvc html.dropdownlistfor

我想将db中的所有角色显示到下拉列表中。我已经以这种方式覆盖了角色提供者的GetAllUser方法。

       public string[] GetAllRoles()
         {
        string[] roles = Session.Query<RoleManager>()
                       .Select(r => r.roleName)
                       .ToArray();
        return roles;
         }

我在Controller中调用了这个方法。

    [HttpGet]
    public ActionResult DisplayAllRoles()
    {
        string[] allRoles = ((CustomRoleProvider)Roles.Provider).GetAllRoles();
        if (allRoles != null)
        {
            //bind dropDownlist list in view with all roles ???

            ModelState.AddModelError("", "List of All roles");

        }
        else ModelState.AddModelError("","No role exists.");
        return View();
    }

查看:

     @Html.DropDownListFor( m => m.AllRoles,new SelectList (Model.AllRoles))

现在我的问题是如何从该字符串数组角色中填充下拉列表。您可以为我的案例编写示例代码。

1 个答案:

答案 0 :(得分:1)

您可以使用SelectListItems。只需将所有角色填充到视图模型中

即可
 public class RoleViewModel
 {
     public IEnumerable<SelectListItem> RolesList { get; set; }
 }

 public ActionResult DisplayAllRoles()
 {
        var roleModel = new RoleViewModel();

        //string[] allRoles = ((CustomRoleProvider)Roles.Provider).GetAllRoles(); 
        var allRoles = new[] { "role1", "role2" }; //hard coded roles for to demo the above method.

        if (allRoles != null)
        {
            //bind dropDownlist list in view with all roles ???
            roleModel.RolesList = allRoles.Select(x => new SelectListItem() {Text = x, Value = x});
        }
        else
            ModelState.AddModelError("", "No role exists.");

        return View(roleModel);
 }

在您的视图中

  @Html.DropDownListFor(m => m.RolesList,
                     new SelectList(
                         Model.RolesList, 
                         "Text", 
                         "Value"))

更新以演示所选的值:

在RoleViewModel中添加其他属性以获取所选值

  public class RoleViewModel
  {
     public RoleViewModel()
     {}

     public string SelectedRole { get; set; }

     public IEnumerable<SelectListItem> RolesList { get; set; }
  }

在Razor View中,使用Html.BeginForm包装下拉列表并包含Submit按钮。 同时更改下拉列表以获得Model.SelectedRole。

 @using (Html.BeginForm("DisplayAllRoles", "Home"))
 {
     @Html.DropDownListFor(m => m.RolesList,
        new SelectList(
        Model.RolesList,
        "Text",
        "Value", Model.SelectedRole))


     <p><input type="submit" value="Save" /></p>
 }

在您的Controller中,创建一个Post动作

    [HttpPost]
    public ActionResult DisplayAllRoles(FormCollection form) {
        var selectedValue = form["RolesList"];
        return View();
    }

以上selectedValue是您选择的值。