使用IEnumerable的ASP.NET MVC3模型绑定(无法推断类型)

时间:2011-03-28 22:59:42

标签: asp.net-mvc-3 model

我有一个模型类(为简洁而编辑)

模型类

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集合(或者更确切地说是你自己的类)?

2 个答案:

答案 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循环更好,更强大。