【问题标题】:POST Model(DTO) with List to controllerPOST 模型(DTO)与列表到控制器
【发布时间】:2020-05-16 19:17:48
【问题描述】:

我的项目是带有 Razor 页面的 MVC.Net Core 项目。

我的 Dto 课程:

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

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

在视图中我使用@Html.ListBoxFor 创建选择列表

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

image of select list

Controler 将 TicketDto:

public IActionResult Create(TicketDto ticketDto)

当我选择多个项目和 POST 表单来控制 ticketDto.Areas 计数 = 0

我应该如何将带有 List@Html.ListBoxFor 选项的模型类发布到我的控制器?

【问题讨论】:

    标签: c# asp.net-mvc-4 razor .net-core dto


    【解决方案1】:

    默认情况下,多选列表将通过一组选定值进行发布。如果您想获取所有选定的项目,可以这样做:

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

    谢谢

    【讨论】:

    • @Daniil Basanets 这就是您要找的东西吗?
    猜你喜欢
    • 2019-02-01
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    相关资源
    最近更新 更多