具有选定值的 MultiselectList 未在视图中预先选定
MultiselectList with selected values are not pre selected in View
我有一个简单的服务是:
1.获取系统中的所有角色
2.查看当前选中用户的角色
3.在下拉列表中呈现所有角色,默认选择当前用户角色
为此,我有以下代码:
public ActionResult Edit(string userId)
{
var user = _oAuthUserService.GetUsers()?.Where(u => u.UserId == userId).FirstOrDefault();
var userRoles = user.Roles; //[Admin,Manager]
var allRolesFromService = _oAuthUserService.AllRoles.Select(x=>new {
Id =x.RoleName,
Name =x.RoleName
}).ToList(); //All roles in the System [Role1,Role2,Role3,Admin,Manager]
ViewData["AllRoles"] = new MultiSelectList(allRolesFromService, "Id", "Name", userRoles);
return View(user);
}
鉴于我在做,
@Html.ListBox("AllRoles", (MultiSelectList)ViewData["AllRoles"], new { multiple = "multiple" });
但是当我导航到视图时,预选了 none 个项目?我在这里错过了什么?
出现此问题是因为您在此行中使用与绑定到 ListBox
助手的模型名称相同的 ViewData
键名:
@Html.ListBox("AllRoles", (MultiSelectList)ViewData["AllRoles"], new { multiple = "multiple" })
假设 AllRoles
是一个数组或列表 属性 inside viewmodel class,你不能将它重用为 ViewData
key name 因为命名冲突会发生它们,导致选项列表无法正确显示。您可以使用与视图模型的 属性 名称不同的名称重命名 ViewData
键名:
ViewData["AllRolesList"] = new MultiSelectList(allRolesFromService, "Id", "Name", userRoles);
然后在 ListBox(For)
帮助程序中使用新的键名:
ListBox 助手
@Html.ListBox("AllRoles", (MultiSelectList)ViewData["AllRolesList"], new { multiple = "multiple" })
ListBoxFor 助手
@Html.ListBoxFor(model => model.AllRoles, (MultiSelectList)ViewData["AllRolesList"], new { multiple = "multiple" })
我有一个简单的服务是: 1.获取系统中的所有角色 2.查看当前选中用户的角色 3.在下拉列表中呈现所有角色,默认选择当前用户角色
为此,我有以下代码:
public ActionResult Edit(string userId)
{
var user = _oAuthUserService.GetUsers()?.Where(u => u.UserId == userId).FirstOrDefault();
var userRoles = user.Roles; //[Admin,Manager]
var allRolesFromService = _oAuthUserService.AllRoles.Select(x=>new {
Id =x.RoleName,
Name =x.RoleName
}).ToList(); //All roles in the System [Role1,Role2,Role3,Admin,Manager]
ViewData["AllRoles"] = new MultiSelectList(allRolesFromService, "Id", "Name", userRoles);
return View(user);
}
鉴于我在做,
@Html.ListBox("AllRoles", (MultiSelectList)ViewData["AllRoles"], new { multiple = "multiple" });
但是当我导航到视图时,预选了 none 个项目?我在这里错过了什么?
出现此问题是因为您在此行中使用与绑定到 ListBox
助手的模型名称相同的 ViewData
键名:
@Html.ListBox("AllRoles", (MultiSelectList)ViewData["AllRoles"], new { multiple = "multiple" })
假设 AllRoles
是一个数组或列表 属性 inside viewmodel class,你不能将它重用为 ViewData
key name 因为命名冲突会发生它们,导致选项列表无法正确显示。您可以使用与视图模型的 属性 名称不同的名称重命名 ViewData
键名:
ViewData["AllRolesList"] = new MultiSelectList(allRolesFromService, "Id", "Name", userRoles);
然后在 ListBox(For)
帮助程序中使用新的键名:
ListBox 助手
@Html.ListBox("AllRoles", (MultiSelectList)ViewData["AllRolesList"], new { multiple = "multiple" })
ListBoxFor 助手
@Html.ListBoxFor(model => model.AllRoles, (MultiSelectList)ViewData["AllRolesList"], new { multiple = "multiple" })