问题描述
||
我遇到一种情况,想将自定义
EditorTemplate
与viewmodel一起使用。所以我有我的viewmodel ...
class Aspect {
}
class Aspectviewmodel {
}
然后我的EditorTemplate
观看次数
共享
编辑器模板
Aspect.cshtml
Aspect.cshtml
@model Aspectviewmodel
//其他html
然后在另一个取Aspectviewmodel
的视图中,我称@Html.EditorFor(model => model)
,但它不起作用。仅当我使用硬编码字符串“ 4”时才有效。
知道为什么不被调用吗?
解决方法
如果编辑器模板的类型为
AspectViewModel
,则应将其命名为AspectViewModel.cshtml
。然后,您要做的就是:
@model AspectViewModel
@Html.EditorForModel()
要么
@model SomeViewModel
@Html.EditorFor(x => x.Aspect)
其中SomeViewModel
的Aspect
属性为AspectViewModel
类型。
约定是,应将编辑器/显示命名为调用它的属性的类型,而不是此属性的名称。
它们也非常适合收藏。例如,如果您具有以下属性:
public class SomeViewModel
{
public IEnumerable<AspectViewModel> Aspects { get; set; }
}
而您使用:
@model SomeViewModel
@Html.EditorFor(x => x.Aspects)
然后将为该集合的每个元素呈现“ 14”编辑器模板。因此,您实际上不再需要在视图中编写for
/foreach
循环。
,这是因为您的模型是AspectViewModel
,但是视图名称是Aspect
。它们必须完全匹配。