2013-02-12 139 views
1

我遇到了無法調用正確的DisplayTemplate的問題。DisplayFor無法使用具有不同命名空間的相同型號名稱

我有兩個型號:

CompanyName.Application.Web.Controllers.SharedViewModels.PaymentItemViewModel 
CompanyName.Application.ViewModels.SharedViewModels.PaymentItemViewModel 

這些對象中的一個IEnumerable使用,然後傳遞到DisplayTemplate。

DisplayTemplates/PaymentItemViewModel.cshtml:

@model CompanyName.Application.ViewModels.Web.SharedViewModels.PaymentItemViewModel 

DisplayTemplates/PaymentItems.cshtml:

@model CompanyName.Application.Web.Controllers.SharedViewModels.PaymentItemViewModel 

如果我嘗試調用PaymentItems.cshtml的,像這樣的顯示模板:

@Html.DisplayFor(model => model.PaymentItems, "DisplayTemplates/PaymentItem") 

它拋出一個錯誤,它抱怨模型傳入d ictionary與字典所期望的模型類型不同。在model.PaymentItems的類型是絕對的

CompanyName.Application.Web.Controllers.SharedViewModels.PaymentItemViewModel 

一個IEnumerable如果我叫,像這樣其他的模板不工作:

@Html.DisplayFor(model => model.PaymentItems) 
然而

如果我指定的模板名稱:

@Html.DisplayFor(model => model.PaymentItems, "DisplayTemplates/PaymentItemViewModel.cshtml") 

然後失敗。就好像指定模板名稱一樣被忽略,或者它破壞了模板功能。

+0

如果我嘗試調用PaymentItems.cshtml的顯示模板,像這樣:給你makesure您使用的IEnumerable PaymentItems – 2013-02-12 17:44:19

+0

它是一個IEnumerable一個legitamate答案。我用ViewModels.SharedViewModels的一個是在IList中,但實際上工作。 – Tom 2013-02-12 17:47:30

+0

比你不及格的IList – 2013-02-12 17:53:50

回答

0

Shelakel的關於這一問題的評論一半回答了這個問題對我來說。

我改變了「DisplayTemplates/PaymentItem」是隻「PaymentItem」,並開始調用正確的模板。然而,它確實引發了另一個問題,它抱怨說它試圖將IList傳遞給個人對象。

這是PaymentItems外觀上的主要模式:

private IList<PaymentItemViewModel> paymentItems = new List<PaymentItemViewModel>(); 

public IEnumerable<PaymentItemViewModel> PaymentItems 
{ 
    get { return paymentItems; } 
    set { paymentItems = value.ToList(); } 
} 

要解決我不得不做出對顯示模板一個IList模型中的問題,並把一個foreach裏面。有點毫無意義,因爲我認爲模板的主要原因之一是你不需要循環查看視圖上的集合!

反正我信了IList的問題從最初的收集開始生活一個IList事實莖,但我得到了現在的工作,所以我想這個問題的回答。

IList<PaymentItemViewModel改變paymentItems聲明IEnumerable<PaymentItemViewModel>不會改變任何東西。

相關問題