绑定到具有类型类的嵌套列表的视图模型

本文关键字:嵌套 列表 视图 模型 类型 绑定 | 更新日期: 2023-09-27 18:35:53

我正在尝试将 POST 请求绑定到我的控制器操作中的视图模型,并且似乎正在发送正确的参数,但我的视图模型数据似乎null尽管尝试了多种方法。 我有以下视图模型,我从我的视图中绑定到该模型:

public class OrderDetailViewModel {
   public List < OrderDetail > OrderDetails;
}

数据正确加载到我的视图中,主视图如下所示:

<form class="form-horizontal" id="update-orderdetail" action="/orderdetail/update" method="post">
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true, "", new { @class = "alert alert-danger" })
        <table class="table table-striped table-bordered table-hover results">
            <thead>
                ... tr tags ...
            </thead>
            <tbody>
                @Html.EditorFor(x => x.OrderDetails)
            </tbody>
        </table>
        <div class="form-group">
            <div class="pull-right">
                <button type="reset" class="btn btn-default">Reset</button>
                <button type="submit" class="btn btn-success">Save</button>
            </div>
        </div>
    </form>

这是我的EditorTemplates/OrderDetail.cshtml的样子:

@model CorinthVendorPortal.Models.OrderDetail
<tr>
    <td>@Html.DisplayFor(x => x.PurchaseOrder)</td>
    <td class="editable">
        @Html.HiddenFor(x => x.ID)
        @Html.HiddenFor(x => x.PurchaseOrder)
        @Html.TextBoxFor(x => x.Price, new { @type = "number", @class = "form-control" })
    </td>
    <td>@Html.DisplayFor(x => x.StockCode)</td>
    <td>@Html.DisplayFor(x => x.MStockDes)</td>
    <td>@Html.DisplayFor(x => x.OrderQtyOrig)</td>
    <td class="editable">
        @Html.TextBoxFor(x => x.OrderQtyCur, new { @type = "number", @class = "form-control" })
    </td>
    <td>@Html.DisplayFor(x => x.DueDateOrig)</td>
    <td class="editable">
        @Html.TextBoxFor(x => x.DueDateCur, new { @type = "date", @class = "form-control" })
    </td>
    <td>@Html.DisplayFor(x => x.ShipDateOrig)</td>
    <td class="editable">
        @Html.TextBoxFor(x => x.ShipDateCur, new { @type = "date", @class = "form-control" })
    </td>
</tr>

以下是OrderDetail控制器的Update方法的外观(其中我的模型的OrderDetails属性null):

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Update(OrderDetailViewModel model) {
    var l = model; // model.OrderDetails is always null
    ....
    return null;
}

以下是正在发布的内容:

OrderDetails[0].ID:1
OrderDetails[0].PurchaseOrder:0246298
OrderDetails[0].Price:8.85000
OrderDetails[0].OrderQtyCur:200.000000
OrderDetails[0].DueDateCur:
OrderDetails[0].ShipDateCur:
OrderDetails[1].ID:2
OrderDetails[1].PurchaseOrder:0246298
OrderDetails[1].Price:1.40000
OrderDetails[1].OrderQtyCur:750.000000
OrderDetails[1].DueDateCur:
OrderDetails[1].ShipDateCur:

任何帮助或建议将不胜感激。

绑定到具有类型类的嵌套列表的视图模型

您在视图模型中使用字段,但 MVC 绑定仅适用于属性。

改变

public class OrderDetailViewModel {
   public List<OrderDetail> OrderDetails;
}

public class OrderDetailViewModel {
   public List <OrderDetail> OrderDetails { get; set; }
}

并且您的代码应该开始工作。