我有一个模型类(为简洁而编辑)
模型类
public class GridModel
{
public string ItemNumber { get; set; }
public int OnHandQty { get; set; }
}
public class Shipment
{
public string shipTrackingNo {get; set;}
public IEnumerable<GridModel> ItemsShipped { get; set;}
{
cshtml页面
@model Namespc.Models.Shipment
<link href="../../Content/CSS/Grid/Grid.css" rel="stylesheet" type="text/css" />
<script src="../../Scripts/ECommerce.Grid.js" type="text/javascript"></script>
<div id="_shipmentDetailGrid">
<table class="TableStyle">
<tr class="GridRowStyle">
<td width="130px" ></td>
@foreach (var Item in Model.ItemsShipped)
{
<td width="70px" align="center">
@html.LabelFor(item.OnHandQty) <-- Cannot infer type from usage
</td>
}
</tr>
我希望能够绑定驻留在IEnumerable集合中的item.OnHandQty。你怎么能有一个Model类以及一个自定义类的IEnumerable集合(或者更确切地说是你自己的类)?
答案 0 :(得分:2)
那么,ItemsShipped
中存储的项目类型是什么?您应该使用IEnumerable
的通用版本来指示其中存储的类型。
如果您的班级被命名为Item
,那么您会将其声明为IEnumerable<Item>
,然后在运行时进行迭代,即@foreach (var Item in Model.ItemsShipped)
时,Item
的类型将强烈 - 键入而不是普通object
。
答案 1 :(得分:0)
而不是:
@foreach (var Item in Model.ItemsShipped)
{
<td width="70px" align="center">
@html.LabelFor(item.OnHandQty) <-- Cannot infer type from usage
</td>
}
这样做:
@Html.DisplayFor(model => model.ItemsShipped)
然后创建一个自定义显示模板(放在Views/Shared/DisplayTemplates/GridModel.cshtml
中):
@model Namespc.Models.GridModel
<td width="70px" align="center">
@html.LabelFor(model => model.OnHandQty)
</td>
我觉得它没有用,因为你没有将表达式传递给LabelFor
方法。
上述内容比明确的for循环更好,更强大。