C# ASP.NET 列表的 MVC 模型绑定 <T>

C# ASP.NET MVC Model Binding for List<T>

我正在尝试在 C# ASP.NET MVC 中为具有模型绑定的练习餐厅应用程序创建一个表单。我很难理解我究竟做错了什么或如何做。我有一个 OrderItems 的形式和一个数量。我想用数量制作模型,这样我就可以在数据库中制作相应的订单行。

表格(局部视图):

@using FormAddOrderItemModel = Restaurant.Models.Order.Form.FormAddOrderItemModel
@model FormAddOrderItemModel;

@using (Html.BeginForm("Form_AddOrderItems", "Order", FormMethod.Post))
{
    for (var i = 0; i < Model.OrderItems.Count; i++)
    {
        var item = Model.OrderItems[i];
        <div>
            @Html.Label(item.Name)
            @Html.HiddenFor(m => m.ContentsList[i].OrderItem, item)
            @Html.LabelFor(m => m.ContentsList[i].Quantity)
            @Html.TextBoxFor(m => m.ContentsList[i].Quantity)
        </div>
    }
    <input class="btn btn-primary" type="submit" value="Submit">
}

模特:

using System.Collections.Generic;

namespace Restaurant.Models.Order.Form
{
    public class FormAddOrderItemModel
    {
        public List<OrderItem> OrderItems { get; set; }
        public List<FormContents> ContentsList { get; set; }
    }
    
    public class FormContents
    {
        public OrderItem OrderItem { get; set; }
        public int Quantity { get; set; }
    }
}

控制器动作方法:

[HttpPost]
public IActionResult Form_AddOrderItems(List<FormContents> response) 
{
    var test = response;
    
    return View("ManageOrder", _orderService.PrepareManageOrderViewModel(12));
}

我假设这会填充 FormContents 的列表。控制器操作中的 'response' 是 FormContents 的实例化列表,计数为 0。

如何将 FormContents 的列表从我的局部视图传递到我的控制器?

因为你提交的是表单,所以动作的输入参数应该和表单模型一样

public IActionResult Form_AddOrderItems(FormAddOrderItemModel model) 

并且您的视图模型可以更简单

@model Restaurant.Models.Order.Form.FormAddOrderItemModel