【问题标题】:post multi-select list to list of objects asp.net core 2将多选列表发布到对象列表 asp.net core 2
【发布时间】:2019-01-29 02:15:56
【问题描述】:

我有两个班级,分别是 UserRole

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");

问题是当我发布我的表单时,数据是这样发送的 ...&amp;Roles=role1,role2&amp;... 所以user.Roles 变为空,而我想创建两个名为role1role2 的角色并将它们分配给user.Roles(实际上,我希望Asp 这样做)

【问题讨论】:

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


    【解决方案1】:

    Select Tag Helper asp-for 指定选择元素的模型属性名称,asp-items 指定选项元素(SelectListItem 的集合),而不是对象集合。

    1.添加一个带有 List 的 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 为 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” p>

    【讨论】:

    • 我不会使用 viewbag 而是使用属性。
    • 嘿!你找到解决方案了吗?多选是否适用于从头开始的 asp.net core razor 页面?
    【解决方案2】:

    在控制器中你有一个角色列表:

     List<Roles> rolesList = new List<Roles>();
     roleList = _context.Roles.Tolist();
     ViewBag.Roles =rolesList;
    

    在视图中:

    <select multiple="multiple" class="multi-select" id="my_multi_select1" asp-for="Roles" asp-items=@(new MultiSelectList(@ViewBag.Roles, "IdRoles", "Roles"))></select> 
    

    【讨论】:

      猜你喜欢
      • 2020-12-05
      • 2019-08-06
      • 1970-01-01
      • 2023-02-04
      • 2017-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多