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

Posted

技术标签:

【中文标题】List<T> 的 C# ASP.NET MVC 模型绑定【英文标题】:C# ASP.NET MVC Model Binding for List<T> 【发布时间】:2021-12-27 02:00:45 【问题描述】:

我正在尝试在 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 的列表。控制器操作中的“响应”是FormContents 的实例化列表,计数为 0。

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

【问题讨论】:

【参考方案1】:

由于是提交表单,所以action的输入参数应该和表单模型一致

public IActionResult Form_AddOrderItems(FormAddOrderItemModel model) 

你的视图模型可以更简单

@model Restaurant.Models.Order.Form.FormAddOrderItemModel

【讨论】:

以上是关于List<T> 的 C# ASP.NET MVC 模型绑定的主要内容,如果未能解决你的问题,请参考以下文章

C#移除List<T> 指定List<T> 数据项

C# List<T;用法

如何在 C# 中将 List<DataRow> 转换为 List<T>?

C#中List<T>的作用与用法,求详解 谢谢

C# 中 List<T> 的只读冲突? [复制]

请教C#中的List<T>,筛选list中特定元素的方法