将多选列表发布到对象列表asp.net core 2 [英] post multi-select list to list of objects asp.net core 2
问题描述
我有两个类,分别是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做到这一点)
Select Tag Helper asp-for指定select元素的模型属性名称,而asp-items指定option元素(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 " >
I have two classes called User and Role. User is like this
class User{
...
public List<Role> Roles;
}
and Role is like this
class Role{
...
public int ID;
public string Name;
}
now I have an action (Submit)
public IActionResult Submit(User user){
...
}
in my index.cshtml select
is
<select multiple="multiple" class="multi-select" id="my_multi_select1" asp-for="Roles" asp-items="ViewBag.Roles"></select>
and ViewBag.Roles
value is
ViewBag.Roles= new SelectList(Role.SelectAll(), "Name", "Name");
the problem is that when I post my form, data is sent like this
...&Roles=role1,role2&...
and so user.Roles becomes null while I want to make two Roles with names role1
and role2
and assign them to user.Roles (Actually I want Asp does that)
The Select Tag Helper asp-for specifies the model property name for the select element and asp-items specifies the option elements(a collection of SelectListItem ),rather than object collection.
1.Add a ViewModel with a List as the property for your dropdown items.
public class UserViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public List<int> Roles { get; set; }
}
2.In.cshtml file select like below
@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.The value of ViewBag.Roles like below, get the Roles with RoleId
ViewBag.Roles = _context.Roles.Select(r=>new SelectListItem { Value=r.ID.ToString(),Text=r.Name}).ToList();
If you want to get Roles with name ,you could change "Value=r.ID.ToString()" to"Value=r.Name"
这篇关于将多选列表发布到对象列表asp.net core 2的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!