我有两个类,分别是User和Role。 用户就是这样
class User{
...
public List<Role> Roles;
}
角色就是这样
class Role{
...
public int ID;
public string Name;
}
现在我有一个动作(提交)
public IActionResult Submit(User user){
...
}
在我的index.cshtml select
中是
<select multiple="multiple" class="multi-select" id="my_multi_select1" asp-for="Roles" asp-items="ViewBag.Roles"></select>
和ViewBag.Roles
的值是
ViewBag.Roles= new SelectList(Role.SelectAll(), "Name", "Name");
问题是当我发布表单时,数据是这样发送的
...&Roles=role1,role2&...
所以user.Roles变为空,而我想创建两个分别为名称role1
和role2
的角色,并将它们分配给user.Roles(实际上我希望Asp做到这一点)
答案 0 :(得分:1)
选择标记助手asp-for指定选择元素的模型属性名称,而asp-items指定选项元素(SelectListItem的集合),而不是对象集合。
1。添加带有列表的ViewModel作为下拉菜单项的属性。
public class UserViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public List<int> Roles { get; set; }
}
2.In.cshtml文件如下选择
@model PostMultiSelect.Models.UserViewModel
<select multiple="multiple" class="multi-select" id="my_multi_select1" asp-for="@Model.Roles" asp-items="(List<SelectListItem>)ViewBag.Roles"></select>
3。ViewBag.Roles的值如下所示,获取带有RoleId的Roles
ViewBag.Roles = _context.Roles.Select(r=>new SelectListItem { Value=r.ID.ToString(),Text=r.Name}).ToList();
如果要获取具有名称的角色,则可以将“ Value = r.ID.ToString()”更改为“ Value = r.Name ” >
答案 1 :(得分:0)
在控制器中,您具有角色列表:
myBooleanProperty
视图中:
List<Roles> rolesList = new List<Roles>();
roleList = _context.Roles.Tolist();
ViewBag.Roles =rolesList;