我想将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))
现在我的问题是如何从该字符串数组角色中填充下拉列表。您可以为我的案例编写示例代码。
答案 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是您选择的值。