2012-05-14 63 views
0

在我看來,文件我目前有以下代碼:如何使用編輯器模板與默認對象實例

@if ((Model.CustomerOrderTrackings != null) && (Model.CustomerOrderTrackings.Count > 0)) { 
     for (int i = 0; i < Model.CustomerOrderTrackings.Count; i++) { 
      @Html.EditorFor(m => m.CustomerOrderTrackings[i]) 
     } 
    } else { 
     @*The problem is here*@ 
     @Html.EditorFor(m => new CustomerOrderTracking()) 
    } 

然後,我的編輯模板看起來是這樣的:

@model Models.CustomerOrderTracking 

<tr class="gridrow"> 
    <td class="carrierName"> 
     @Html.HiddenFor(m => m.Id, new { id = "" }) 
     @Html.HiddenFor(m => m.ShipperId, new { id = "", @class = "trackingShipperId" }) 
     @Html.DropDownListFor(m => m.CarrierName, ViewExtensions.ToFriendlySelectList<CustomerOrderTracking.CarrierNames>(Model.CarrierName), new { id = "" }) 
    </td> 
    <td class="service">@Html.DropDownListFor(m => m.ShippingType, ViewExtensions.ToFriendlySelectList<CustomerOrderTracking.ShippingTypes>(Model.ShippingType), new { id = "" })</td> 
    <td class="trackingNumber">@Html.TextBoxFor(m => m.ShippingTrackingNumber, new { @class = "trackingInput", id = "" }) <a href="" target="_blank" class="icon track"></a></td> 
    <td class="shippingCost"> 
     @Html.TextBoxFor(m => m.ShippingCost, new { @class = "shippingInput", id = "" }) 
     <div onclick="Operations.Orders.DeleteTrackingRow(this)" class="icon delete deleteTracking" title="Delete this shipment?"></div> 
    </td> 
</tr> 

我試圖做的是在當前沒有任何項目附加到該對象的情況下向該表格添加默認行。該對象的新實例不起作用,因爲這將導致以下錯誤:Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.

我可以手動編碼輸入,但是由於我使用的是手動編碼輸入,所以我的代碼比較sl and,然後從ASP.NET MVC擴展中自動生成輸入。

有沒有一種方法可以將對象的默認實例傳遞給我的編輯器模板?

回答

1

我在MVC框架中看到它的方式是,在控制器中檢測您的需求並根據需要調整模型,然後才能到達視圖。另一個答案是,99%不是以宗教的方式來做到這一點,就是在你看來有邏輯(ew!)。

public ActionResult SomeAction() 
{ 

    if (model.CustomerOrderTrackings == null 
     || model.CustomerOrderTrackings.Count > 0) 
    { 
    // Do Something with model 
    } 

    this.View(model) 
} 
+0

我不知道爲什麼我不只是檢測控制器和修改我的模型相應的(我寧願保持邏輯我的觀點)。有時候,你會被困在一條路上,儘管附近有一個更簡單的解決方案,但你仍然試圖解決它。感謝你的回答。 –

+0

哦,是啊在那裏!每隔一段時間,正確的答案就非常簡單,我不會自己去考慮。 –

0

In my view file I current have the following code:

@if ((Model.CustomerOrderTrackings != null) && (Model.CustomerOrderTrackings.Count > 0)) { 
    for (int i = 0; i < Model.CustomerOrderTrackings.Count; i++) { 
     @Html.EditorFor(m => m.CustomerOrderTrackings[i]) 
    } 
} else { 
    @*The problem is here*@ 
    @Html.EditorFor(m => new CustomerOrderTracking()) 
} 

解決方法是聲明你的模型的實例在HTML EditorFor之外。 例如:

@if ((Model.CustomerOrderTrackings != null) && (Model.CustomerOrderTrackings.Count > 0)) { 
    for (int i = 0; i < Model.CustomerOrderTrackings.Count; i++) { 
     @Html.EditorFor(m => m.CustomerOrderTrackings[i]) 
    } 
} else { 
    @{ CustomerOrderTracking stubModel = new CustomerOrderTracking(); } 
    @Html.EditorFor(m => stubModel) 
} 
相關問題