在视图中不预先选择具有所选值的MultiselectList
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在视图中不预先选择具有所选值的MultiselectList相关的知识,希望对你有一定的参考价值。
我有一个简单的服务: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" });
但是当我导航到查看时,没有预先选择的项目?我在这里错过了什么?
答案
出现此问题是因为您在此行中使用相同的ViewData
密钥名称作为绑定到ListBox
帮助程序的模型名称:
@Html.ListBox("AllRoles", (MultiSelectList)ViewData["AllRoles"], new { multiple = "multiple" })
假设AllRoles
是viewmodel类中的数组或列表属性,您不能将其重用为ViewData
键名,因为它们之间会发生命名冲突,导致选项列表无法正确显示。您可以使用与viewmodel属性名称不同的名称重命名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" })
以上是关于在视图中不预先选择具有所选值的MultiselectList的主要内容,如果未能解决你的问题,请参考以下文章