我遇到了一个问题,我无法调用正确的DisplayTemplate。
我有两种模式:
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")
它会抛出一个错误,它抱怨传入字典的模型与字典所期望的模型类型不同。 model.PaymentItems中的类型绝对是IEnumerable的
CompanyName.Application.Web.Controllers.SharedViewModels.PaymentItemViewModel
如果我这样打电话,另一个模板确实有效:
@Html.DisplayFor(model => model.PaymentItems)
但是如果我指定模板名称:
@Html.DisplayFor(model => model.PaymentItems, "DisplayTemplates/PaymentItemViewModel.cshtml")
然后失败了。就好像指定模板名称要么完全被忽略,要么它会破坏模板功能。
答案 0 :(得分: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开始生活的事实,但我现在已经开始工作所以我想这个问题已得到解答。
将paymentItems声明从IList<PaymentItemViewModel
更改为IEnumerable<PaymentItemViewModel>
不会改变任何内容。