我是剃刀MVC编程的新手,我需要你对我的代码有什么问题的建议。
我有一个模特
public class OrderDetails : OrderList
{
public string CompanyId { get; set; }
public List<OrderItems> OrdItems { get; set; }
}
public class OrderItems
{
public int Id { get; set; }
public string StopAddressName { get; set; }
}
我有一个填充数据的控制器。
public ActionResult Edit()
{
OrderDetails ordDtl = new OrderDetails();
ordDtl.CompanyId = "1";
ordDtl.OrdItems = new List<OrderItems>();
for (int i = 1; i < 4; i++)
{
OrderItems tmp = new OrderItems();
tmp.Id = i;
tmp.StopAddressName = "Street " + i;
ordDtl.OrdItems.Add(tmp);
}
return View("EditOrder", ordDtl);
}
当我将其发送到视图时,它会显示所有数据。这是我的观点。
@model OrderDetails
@using (Html.BeginForm("Edit", "Orderlayouts", FormMethod.Post))
{
<fieldset><legend>OrderDetail</legend>
<div class="editor-label">
@Html.LabelFor(model => model.CompanyId)
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.CompanyId)
</div>
<table>
<tr>
<td>id</td>
<td>Address</td>
</tr>
@foreach (var itm in Model.OrdItems)
{
<tr>
<td>@itm.Id</td>
<td>@itm.StopAddressName</td>
</tr>
}
</table>
<p>
<input type="submit" value="Edit" />
</p>
</fieldset>
}
当我单击控制器CompanyID中的提交按钮时,OrdItems值变为null。你能指出我的代码出了什么问题吗? 这是我的控制器。
[HttpPost]
public ActionResult Edit(OrderDetails Orderdt)
{
return View("EditOrder", Orderdt);
}
任何建议都将不胜感激。
答案 0 :(得分:2)
我会尝试这样做。
@for (int i = 0; i < Model.OrdItems.Count; i++)
{
@Html.DisplayFor(model => model.OrdItems[i].Id)@Html.HiddenFor(model => model.OrdItems[i].Id)
@Html.DisplayFor(model => model.OrdItems[i].StopAddressName)@Html.HiddenFor(model => model.OrdItems[i].StopAddressName)
}
答案 1 :(得分:0)
模型绑定老实说是我MVC工作的祸根。
但是,在这里,您将看到仅包含companyID的form
样式帖子 - 您的视图中没有其他用于绑定的表单字段。
答案 2 :(得分:0)
我假设OrderDetails
是一个实体(通过实体框架与数据库表绑定)。对于具有列表类型的导航属性的所有实体,必须使用ICollection
。此外,所有导航属性(无论是单个外键还是列表)必须是虚拟的。 EF实际上不会返回您的类,而是返回您的类的代理,并重写导航属性以返回正确的对象。如果它不是虚拟的,EF不能进行覆盖,而是获得空值。所以你的模型应该是这样的:
public class OrderDetails : OrderList
{
public string CompanyId { get; set; }
public virtual ICollection<OrderItems> OrdItems { get; set; }
}