我有Model类“Customer”。它的一个属性是对象的集合,可以说“Order”。我希望在编辑期间我可以修改与我想要更新的所选客户相关联的订单列表,但是当我提交修改后的客户和修改后的订单时,订单对象为空。请帮助我如何在编辑时发送修改后的订单。这是我的代码
班级
public class Customer
{
public int CustomerId { get; set; }
public string CustomerName { get; set; }
public List<Order> Orders { get; set; }
}
public class Order
{
public int OrderId { get; set; }
public string OrderName { get; set; }
}
修改视图
@model MVCTestApp.Models.Customer
@{
ViewBag.Title = "Edit";
}
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Customer</legend>
@Html.HiddenFor(model => model.CustomerId)
<div class="editor-label">
@Html.LabelFor(model => model.CustomerName)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.CustomerName)
@Html.ValidationMessageFor(model => model.CustomerName)
</div>
@foreach (var order in Model.Orders)
{
<div class="editor-label">
@Html.Label(order.OrderName)
</div>
<div class="editor-field">
@Html.Editor(order.OrderName, new { id = order.OrderId })
</div>
}
<p><input type="submit" value="Save" /> </p>
</fieldset>
}
已提交已修改的视图
答案 0 :(得分:1)
使用 for-loop
代替foreach
:
@for (var i=0;i<Model.Orders.Count();i++)
{
<div class="editor-label">
@Html.Label(Model.Orders[i].OrderName)
</div>
<div class="editor-field">
@Html.EditorFor(m=> Model.Orders[i].OrderName)
</div>
}
可以在foreach
方法的渲染html上轻松看到此问题的原因。元素的名称没有索引,都具有相同的名称。模型绑定器无法推断如何将其传递给控制器。使用for-loop
你有点强迫(如果这是正确的术语)标记/ html在Orders
个对象上有一个索引。完成此操作后,模型绑定器现在可以正确地将输入映射到Orders
字段。
哦顺便说一下。现在您使用的是for-loop
,您需要验证您的Orders
集合是否为空。但我相信你可以很容易地做到这一点。
答案 1 :(得分:0)
我建议您按照以下方式获取订单:(检查order_OrderName是否是表单中提交的输入的名称,请参阅源代码,例如使用firebug或其他内容)
public ActionResult Edit(int id, string[] order_OrderName , Customer customer )
{
//////
}