在ASP.NET MVC应用中,当我们需要更新主从关系(Master-Detail)记录时,有时需要在单个HTTP POST请求中同时更新多个相关记录。以下是一种解决方法。
首先,我们需要在视图模型类中定义主从关系模型的实体类。假设我们有两个实体类:Order和OrderItem。OrderItem中包含对Order的外键引用。
public class EditOrderViewModel
{
public Order Order { get; set; }
public List OrderItems { get; set; }
}
在编辑订单的视图中,为每个订单条目添加输入框。使用命名约定和索引来确保每个条目正确地绑定到视图模型。
@model EditOrderViewModel
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.HiddenFor(m => m.Order.Id)
@Html.LabelFor(m => m.Order.CustomerName)
@Html.TextBoxFor(m => m.Order.CustomerName, new { @class = "form-control" })
@for (var i = 0; i < Model.OrderItems.Count; i++)
{
@Html.HiddenFor(m => m.OrderItems[i].Id)
@Html.HiddenFor(m => m.OrderItems[i].OrderId)
@Html.LabelFor(m => m.OrderItems[i].Product)
@Html.TextBoxFor(m => m.OrderItems[i].Product, new { @class = "form-control" })
@Html.LabelFor(m => m.OrderItems[i].Quantity)
@Html.TextBoxFor(m => m.OrderItems[i].Quantity, new { @class = "form-control" })
}
}
在处理POST请求的控制器动作中,我们需要加载现有的订单和订单条目,并根据请求中的数据更新它们。最后,我们保存更改并重定向到订单列表。
[HttpPost]
[ValidateAntiForgeryToken