2013-02-12 141 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>不会改变任何东西。

相关问题