将多选列表发布到对象列表asp.net core 2

时间:2018-08-22 18:44:24

标签: asp.net-core-2.0 model-binding multi-select

我有两个类,分别是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变为空,而我想创建两个分别为名称role1role2的角色,并将它们分配给user.Roles(实际上我希望Asp做到这一点)

2 个答案:

答案 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;