使用DisplayExtensions.DisplayFor方法时

时间:2016-08-09 20:44:49

标签: c# asp.net-mvc razor

根据微软的documention,我应该能够在调用@ Html.DisplayFor时将匿名类型的对象作为additionalViewData传递;但是,当我这样做时,我会收到一个黄色屏幕,上面写着:

  

传递到字典中的模型项是类型的   &#39; System.Collections.Generic.List&#39; 1 [Surveys2.Models.ReportingSidebarItemViewModel]&#39;,但这个字典需要一个类型&#39; Surveys2.Models.ReportingSidebarItemViewModel&#39;。< / p>

以下是我观点的一部分:

@model Surveys2.Models.ReportingPageViewModel
@Html.DisplayFor(m => m.Pages, "ReportingSidebarItemViewModel", new { PageType = Model.PageType } )

这是我的控制器动作:

public ActionResult Summary(string projectCode)
{
ReportingPageViewModel reportingPageViewModel = GetReportingPageViewModel(new ReportingPageParams { ProjectCode = projectCode });
return View("Page", reportingPageViewModel);
}

1 个答案:

答案 0 :(得分:1)

这里的问题是您使用DisplayFor的第二个参数来定位显示页面。当您在没有目标视图的情况下调用displayfor(m =&gt; m.prop)时,ViewEngineCollection将查找最适合的diplay页面。当最适合的显示页面仅用于单个项目并且您传递了一个列表时,它将为您迭代。目标显示假设您传递的是您要定位的页面的确切类型,因此会中断。

编辑 - 有趣的是MSDN文档除了DisplayFor(m =&gt; m.prop)方法之外没有谈论循环