来自默认文件夹以外的MVC模板(EditorTemplates / DisplayTemplates)?

时间:2011-10-20 20:22:54

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

您能否将MVC指向默认文件夹以外的文件夹(Views / Shared / EditorTemplates& Views / Shared / DisplayTemplates)?我想把它们放在那些下面的子文件夹中,或者放在共享文件夹之外的其他文件夹中。

例如,如果我在此文件夹下有一个编辑器模板:

  

〜\视图\订单\ ProductModel.cshtml

如何告诉我的EditorFor模板使用此tempalte名称?

我尝试完全限定它,但这不起作用:

@Html.EditorFor(m => m.ProductModel, @"~\Views\Order\ProductModel.cshtml")

我尝试使用正斜杠&反斜杠,有/没有.chstml,我能想到的每一个组合。我开始认为这不受支持,但我无法想象为什么它不会。

3 个答案:

答案 0 :(得分:52)

不,我担心你不能这样做。

  

例如,如果我在此文件夹下有一个编辑器模板

这不再是编辑器模板。这是部分的。如果要在不同控制器之间共享编辑器模板,只需将它们放在~/Views/Shared/EditorTemplates文件夹中即可。

就子文件夹而言,您可以这样做:

@Html.EditorFor(x => x.Foo, "Order/ProductModel")

将呈现~/Views/CurrentController/EditorTemplates/Order/ProductModel.cshtml~/Views/Shared/EditorTemplates/Order/ProductModel.cshtml编辑器模板。

答案 1 :(得分:4)

旧问题,但是...为特定控制器添加显示/编辑器模板的正确方法是将其添加到DisplayTemplatesEditorTemplates子文件夹中。

假设在您的示例中,您有OrderController,您只需将模型的显示模板放入子文件夹,如下所示:

~\Views\Order\DisplayTemplates\ProductModel.cshtml

然后,从您的视图中正常调用显示模板(例如:来自`〜\ Views \ Order \ Index.cshtml):

@Html.DisplayFor(m => m.MyProductModelProperty)

答案 2 :(得分:3)

如果你这样做:

@Html.EditorFor(x => x.Foo, "Order/ProductModel")

它不会将Foo解析为集合并将编辑器模板应用于每个项目。它宁愿假设您的编辑器模板应该作为一个整体应用于集合。

如果要将编辑器模板单独应用于每个项目,只需将其放在视图文件夹下的EditorTemplates文件夹中(因为它具有优先权)并使用默认语法:

@Html.EditorFor(x => x.Foo)

当然,编辑器模板的名称必须与集合中的项目类型相匹配。