1

我想将数据库中的所有角色显示到下拉列表中。我以这种方式覆盖了角色提供者的 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))

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

4

1 回答 1

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 视图中,使用 Html.BeginForm 包装下拉列表并包含一个提交按钮。还将下拉列表更改为具有 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>
 }

在您的控制器中,创建一个 Post 操作

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

上面的 selectedValue 是您选择的那个。

于 2013-10-12T07:40:13.523 回答