将多选列表发布到对象列表asp.net core 2 [英] post multi-select list to list of objects asp.net core 2

查看:80
本文介绍了将多选列表发布到对象列表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变为空,而我想创建两个分别为role1role2的角色,并将它们分配给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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆