我的理解是位置是:
~/Views/Shared/EditorTemplates/ViewModelName
但是我有很多使用区域的视图文件夹。我可以定义要与
调用的某些参数一起使用的文件@Html.EditorFor( ...
答案 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")
这就是说我会避免这样做并坚持惯例。这意味着如果您想在定义它的区域之外使用某些编辑器模板,那么您可能没有在正确的位置定义此模板,而应将其移动到共享文件夹中。