簡體   English   中英

POST 模型(DTO),列表為 controller

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

我的項目是 MVC.Net Core 項目,有 Razor 頁。

我的 DTO class:

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

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

在視圖中,我使用 @Html.ListBoxFor 創建了 select 列表

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

View也有ViewData/ViewBag:

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

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>

select 列表的圖像

控制器將 TicketDto:

public IActionResult Create(TicketDto ticketDto)

當我 select 多個項目和 POST 形式到 controller 時, ticketDto.Areas計數 = 0

我應該如何將帶有列表@Html.ListBoxFor選擇的 model class 發布到我的 controller?

默認情況下,多選列表將發布選定值的數組。 如果您想獲得所有選定的項目,可以這樣做:

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>
 }

在此處輸入圖像描述

謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM