You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core MVC多行数据模型绑定失败求助

问题:ASP.NET MVC批量订单提交时控制器接收不到数据

需求说明

我希望控制器能传递如下格式的JSON数据:
我想传递给API的示例数据
最初计划通过模型绑定实现,现在改用jQuery方式提交也可以接受。

模型类

public class Orders
{
    public int Id { get; set; }
    public int CustomerId { get; set; }
    public string ItemName { get; set; }
    public double Price { get; set; }

    public IEnumerable<SelectListItem> CustomersList { get; set; }
}

控制器代码

// GET: OrdersController/Create
public ActionResult Create()
{
   var listCustomers = dbContext.Customers
       .Select(x => new SelectListItem
       {
           Value = x.Id.ToString(),
           Text = x.DepName
       });

        var orders = new Orders()
        {
            CustomersList = listCustomers
        };

    //var orders = new List<Orders>();
    return View(orders);
}

// POST: OrdersController/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(List<Orders> ordersList)
{
    Orders newOrders = new Orders();

    foreach (var order in ordersList)
    {
        newOrders.Id = 0;
        newOrders.CustomerId = order.CustomerId;
        newOrders.ItemName = order.ItemName;
        newOrders.Price = order.Price;
    }

    // 后续会将newOrders处理为application/json格式发送给后端API
}

视图标记

@model List<NameSpace.Web.Models.Orders>

@{
  ViewData["Title"] = "Create";
  Layout = "~/Views/Shared/_Layout.cshtml";
}

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

<div class="row">

    <div class="col-md-8">
       <div class="form-group">
           @Html.LabelFor(model => model.CustomerId, htmlAttributes: new { @class = "control-label col-md-6" })
           @Html.DropDownListFor(model => model.CustomerId, Model.CustomersList, "Select Customer ", new { @class = "form-control" })
           @Html.ValidationMessageFor(model => model.DepId, "", new { @class = "text-danger" })
       </div>
    </div>

    <hr>

    <div class="col-md-12">
        <div class=''></div>
       
            <thead>
                <tr>
                    //<th style="width:150px">Cust. Id</th>
                    <th style="width:150px">Item Name</th>
                    <th style="width:150px">Price</th>
                </tr>
            </thead>

            <tbody id="tblOrdersBody">
                <tr>
                    //<td><input name='Orders[0].CustomerId' class="form-control" /></td>
                    <td><input name='Orders[0].ItemName' class="form-control" /></td>
                    <td><input name='Orders[0].Price' class="form-control" /></td>
                </tr>
            </tbody>
            <tfooter>
                <tr><a hre="#" class="btn btn-success" id="addOrder"></a> </tr>
            </tfooter>
        </table>


        <div class="row">
            <div class="tile-footer d-flex justify-content-around">
                @Html.ActionLink("Cancel", "Index", null, new { @class = "btn btn-danger" })
                <input id="btnSave" type="submit" value="Save Order" class="btn btn-primary" />
            </div>
        </div>
    </div>
</div>
}

@section Scripts {

<script>
    var i = 1;
    $(document).on("click", "#addOrder", function () {

        $("#tblOrdersBody").append("<tr>"
            //+ "<td><input name='Orders[" + i + "].CustomerId' class='form-control' /></td>"
            + "<td><input name='Orders[" + i + "].ItemName' class='form-control'/></td>"
            + "<td><input name='Orders[" + i + "].Price' class='form-control'/></td>"
            + "<td><button type='button' class='btn btn-danger' id='btnRemove' </buuton></td>"
            + "</tr > ");
        i++;
    });
</script>
}

当前遇到的问题

已参考过批量插入相关的解决方案,但控制器中接收的ordersList始终为空(条目数为0),无法获取页面提交的订单数据。

内容的提问来源于stack exchange,提问作者Abdi fatah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:30:43