【发布时间】:2015-12-30 12:51:40
【问题描述】:
我看过this post,那里的小伙子似乎想做我的目标。我继承了这个应用程序,虽然我是一名 .NET 开发人员,但与我更喜欢的其他语言的其他 MVC 框架相比,MVC 的东西似乎很神奇。我的显着代码如下:
public class PurchaseOrderViewModel
{
public PurchaseOrderViewModel()
{
this.PurchaseOrder = new PurchaseOrder();
}
// Some other fields here....
public PurchaseOrder PurchaseOrder { get; set; }
public IList<PurchaseOrderItem> OrderItems { get; set; }
}
控制器:
[HttpPost]
public ActionResult Details(PurchaseOrderViewModel viewModel)
{
// bunch of stuff. the viewModels.OrderItems here is null.
}
模型中的 OrderItems 是一个 ICollection 我将其转换为 IList 以实现迭代。视图的相关部分如下:
@model PurchaseOrderViewModel
@for (var i = 0; i < this.Model.OrderItems.Count; i++)
{
@Html.EditorFor(m => m.OrderItems[i].Quantity);
}
那么,为什么我没有通过 OrderItems?这与它们是 IList 而不是 ICollection 的事实有关吗?如果是这样,解决方法是什么?
编辑: 我已经更改了视图代码,因为我留下了我之前尝试过的东西。
编辑 2: 我考虑了当前的评论/答案,所以现在我做了以下更改:
视图模型:
public ICollection<PurchaseOrderItem> PurchaseOrderItems { get; set; }
PurchaseOrderItem.cshtml:(为了以防万一,我实际上已将其保留在代码中):
@model Downland.Model.PurchaseOrderItem
<tr style="background-color: #fff; padding: 8px;">
<td style="text-align: left; width: 210px;">
@if (this.Model.ProductID == null)
{
<img class="viewproduct" src="~/Images/GetThumbnail/-1" alt="Product Image" style="padding: 8px;" />
}
else
{
<img class="viewproduct" src="~/Images/GetProductImage?productId=@(this.Model.ProductID)" alt="Product Image" style="padding: 8px;" />
}
</td>
<td>
@(string.IsNullOrEmpty(this.Model.SKU) ? this.Model.NonDownlandSKU : this.Model.SKU)
</td>
<td>@this.Model.ProductName</td>
<td>
@this.Model.Quantity
@Html.EditorFor(m => m.Quantity)
</td>
<td>
@string.Format("{0:C}", this.Model.PriceExVAT)
@Html.EditorFor(m => m.PriceExVAT)
</td>
<td>@string.Format("{0:C}", this.Model.VATTotal)</td>
<td>
@string.Format("{0:C}", this.Model.ItemTotal)
</td>
</tr>
查看代码:
@Html.EditorFor(m => m.PurchaseOrderItems);
只是另一个有趣的点。在 GET 上,我根据数据库数据在视图模型中设置 PurchaseOrder 和 PurchaseOrderItems。在 Post 上,我们似乎再次使用数据库中的数据在视图模型中设置 purchaseOrder。根据传递给帖子的内容,视图模型中还有一些其他字段正在正确设置,但 PurchaseOrderItems 仍然为空。
【问题讨论】:
-
尝试使用 EditorTemplate。这将解决你的问题。看看这个帖子stackoverflow.com/questions/25365043/…或stackoverflow.com/questions/34028606/…
-
我已经更新了这个问题。我尝试了 EditorTemplate 但无济于事@Shyju
标签: c# asp.net asp.net-mvc