2011-03-28 98 views
0

我有一個模型類(編輯爲簡潔起見)ASP.NET MVC3模型綁定使用的IEnumerable(無法推斷從類型)

模型類

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

那麼,什麼是存儲在ItemsShipped項目的類型?您應該使用IEnumerable的通用版本來指示存儲在其中的類型。

如果你的類被命名爲Item,你將宣佈它IEnumerable<Item>然後,在運行時迭代時,即@foreach (var Item in Model.ItemsShipped)Item的類型將被強類型的,而不是一個簡單的object

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方法。

上面的代碼比explcit for循環更好,更強大。

給一個去。