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