简体   繁体   English

POST 模型(DTO),列表为 controller

[英]POST Model(DTO) with List to controller

My project is MVC.Net Core project with Razor pages.我的项目是 MVC.Net Core 项目,有 Razor 页。

My Dto class:我的 DTO class:

public class TicketDto
{
    public Guid Id { get; set; }

    public IList<KeyValuePair<int, string>> Areas { get; set; }
}

In view i create select list using @Html.ListBoxFor在视图中,我使用 @Html.ListBoxFor 创建了 select 列表

@Html.ListBoxFor(model => model.Areas, (MultiSelectList)ViewBag.AreaId, new { @class="custom-select", @id="inputGroupSelect01", size = 5 })

View also has ViewData/ViewBag: View也有ViewData/ViewBag:

ViewData["AreaId"] = new MultiSelectList(areaService.GetAreas().Select( a => new { a.Id, a.Name }), "Id", "Name");

Razor render next: Razor 接下来渲染:

<select class="custom-select" id="inputGroupSelect01" multiple="multiple" name="Areas" size="5"><option value="1">A</option>
<option value="2">P</option>
<option value="3">S</option>
<option value="10">AB</option>
<option value="11">AB</option>
</select>

image of select list select 列表的图像

Controler takes TicketDto:控制器将 TicketDto:

public IActionResult Create(TicketDto ticketDto)

When i select multiple items and POST form to controller the ticketDto.Areas count = 0当我 select 多个项目和 POST 形式到 controller 时, ticketDto.Areas计数 = 0

How shoud i post model class with List and @Html.ListBoxFor choice to my controller?我应该如何将带有列表@Html.ListBoxFor选择的 model class 发布到我的 controller?

Multiselectlist will post through an array of the selected values by default.默认情况下,多选列表将发布选定值的数组。 If you want to get all the selected items it could be done like this:如果您想获得所有选定的项目,可以这样做:

public class MyData
{
   public string Id { get; set; }
   public string Value { get; set; }
}
public class MyViewModel
{
    public int[] SelectedIds { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

public IActionResult Index()
{
   var data = new List<MyData>
   {
       new MyData() {Id = "2", Value = "P"}, new MyData() {Id = "3", Value = "S"},
       new MyData() {Id = "10", Value = "AB"}
   };
   var model = new MyViewModel
   {
       Items = data.Select(x => new SelectListItem
       {
          Value = x.Id,
          Text = x.Value
       })
    };
    return View(model);
  }

 public IActionResult Create(MyViewModel model)

 @using (Html.BeginForm("Create", "Home", FormMethod.Post))
 {
    @Html.ListBoxFor(x => x.SelectedIds, Model.Items)
    <p><input type="submit" value="Submit" /></p>
 }

在此处输入图像描述

Thanks谢谢

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM