当使用DisplayExtensions时,无法将匿名对象作为additionalViewData传递.DisplayF

本文关键字:对象 additionalViewData DisplayF 传递 DisplayExtensions | 更新日期: 2023-09-27 18:01:39

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

传入字典的模型项类型为1 (Surveys2.Models System.Collections.Generic.List。,但是这个字典需要一个类型为'Surveys2.Models.ReportingSidebarItemViewModel'的模型项。

以下是我的部分观点:

@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);
}

当使用DisplayExtensions时,无法将匿名对象作为additionalViewData传递.DisplayF

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

EDIT——有趣的是MSDN文档没有讨论循环除了DisplayFor(m=> m.prop)方法