C# ASP.NET MVC找不到显示模板局部视图

C# ASP.NET MVC找不到显示模板局部视图,c#,asp.net-mvc,asp.net-mvc-5,C#,Asp.net Mvc,Asp.net Mvc 5,我不确定我做错了什么。未使用我正在使用的模型的默认显示模板 此代码位于我的主操作视图中: @if (Model.EmbeddedMediaModels != null) { foreach (var mediaItem in Model.EmbeddedMediaModels) { BitmapFigureModel bitmap = mediaItem as BitmapFigureModel; if (bitmap != null)

我不确定我做错了什么。未使用我正在使用的模型的默认显示模板

此代码位于我的主操作视图中:

@if (Model.EmbeddedMediaModels != null)
{
    foreach (var mediaItem in Model.EmbeddedMediaModels)
    {
        BitmapFigureModel bitmap = mediaItem as BitmapFigureModel;
        if (bitmap != null)
        {
            var mm = ModelMetadata.FromLambdaExpression(p => bitmap, this.ViewData);

            var modelTypeName = mm.ModelType.Name; // = "BitmapFigureModel"

            // Neither resolve the template.

            // Html.DisplayFor(m => bitmap);
            Html.DisplayFor(m => bitmap, modelTypeName);
        }
    }
}
Model.EmbeddedMediaModels
属性是
EmbeddedMediaModel
基本类型的集合,目前它只包含一个对象,
BitmapFigureModel
,它派生自
EmbeddedMediaModel

人们很容易认为这会混淆问题,但是检索到的
ModelMetadata
实例能够看到正确的
BitmapFigureModel
模型类型

此外,即使我在调用
DisplayFor
时指定了模型类型名称,它仍然不起作用

这是一个正确命名的显示模板局部视图的证明

我做错了什么?

像这样做:

@Html.DisplayFor(m => mediaItem.Name)
如果要加载局部视图,请执行以下操作:

@Html.Partial("~/Views/Shared/DisplayTemplates/BitmapFigureModel.cshtml", mediaItem)
或:

在您的位图图形模型.cshtml中:

@model BitmapFigureModel

与Brad Wilson(ASP.NET团队)的建议相反:

基于表达式的版本主要用于提取值 从模型(它们由当前模型参数化,如图所示) 在上面的示例中)。它们还可用于从中提取值 模型或ViewData以外的某些源(例如,具有 类似“model=>someOtherValue”的表达式,它忽略了模型 完全)。这使得它们在循环中很有用

实际上,似乎不可能“完全忽略模型”。在我的问题下面的评论中,DaveParsons建议通过新建一个模型实例并将其传递到
DisplayFor
来进行实验,这会导致错误:

模板只能与字段访问、属性访问、, 一维数组索引或单参数自定义索引器 表情


因此,我似乎不应该再像Ehsan Sajjad所建议的那样使用
Html.Partial

出于兴趣,您是否尝试过使用
BitmapFigureModel
的测试实例测试
DisplayFor
(例如Html.DisplayFor(m=>new BitmapFigureModel{/*fill-in properties*/}))看看这是一个具体案例的问题,还是解决显示模板的更普遍的问题?@DaveParsons Dude,这是一个很好的决定,因为它导致了这个错误,告诉我我不能做我想做的事情(与MVC团队成员博客上说我能做的相反)。我得到“模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式。”@DaveParsons如果你想发布一个正确的答案,我会将其翻出来,然后添加我自己的答案和错误。我不知道答案,只是帮助调试;我不会在答案中加入任何特别有用的东西。很高兴它帮助您找到了问题:)它不应该只是
Html.DisplayFor(m=>mediaItem)
bitmap
只是铸造的
mediaItem
。如果我没有铸造
mediaItem
,那么MediaMetadata会将其视为错误的模型类型。显然,您的第一行代码在语义上与我的意图完全不同。你是在暗示我不能使用
DisplayFor
显示任何任意对象吗,也就是说,它必须是当前模型上的属性?您正在尝试显示属性的标签,或者您正在尝试使用内部模型加载partia视图。我正在尝试使用其默认模板显示复杂对象模型。您应该将自己的答案标记为已回答。很好的解释谢谢,我会的。因此,我必须在两天内完成评分,这大概是为了让其他人能够给出更好的答案,并进行投票。
@model BitmapFigureModel