在使用MVC区域时,如何定义自定义编辑器模板的位置?

时间:2011-11-21 02:49:55

标签: asp.net-mvc asp.net-mvc-3 razor

我的理解是位置是:

~/Views/Shared/EditorTemplates/ViewModelName

但是我有很多使用区域的视图文件夹。我可以定义要与

调用的某些参数一起使用的文件
@Html.EditorFor( ...

2 个答案:

答案 0 :(得分:4)

这些是默认查找路径,RazorViewEngine将按此顺序搜索编辑器模板:

"~/Areas/{area}/Views/{controller}/EditorTemplates/{templateName}.cshtml",
"~/Areas/{area}/Views/Shared/EditorTemplates/{templateName}.cshtml",
"~/Views/{controller}/EditorTemplates/{templateName}.cshtml",
"~/Views/Shared/EditorTemplates/{templateName}.cshtml",

如果未指定,templateName值默认为对象类型(在您的情况下为“ViewModelName”)。如果MVC找不到具有此名称的模板,则会使用已知的内置模板(int,string,collection,object等)来解决渲染问题。

您可以指定模板名称以覆盖默认值:

@Html.EditorFor(m => m.MyDate, "_MyTemplate")

您还可以指定相对路径:

@Html.EditorFor(m => m.MyDate, "../_MyTemplate")

无法以任何形式指定完整路径(例如:"~/Views/Custom/EditorTemplates/ViewModelName"),永远不应在模板名称中指定扩展名(例如:{{1} },或'_MyTemplate.cshtml')!

答案 1 :(得分:0)

您可以将模板的位置作为第二个参数传递。

@Html.EditorFor(x => x.Foo, "~/Views/Custom/EditorTemplates/ViewModelName.cshtml")

这就是说我会避免这样做并坚持惯例。这意味着如果您想在定义它的区域之外使用某些编辑器模板,那么您可能没有在正确的位置定义此模板,而应将其移动到共享文件夹中。