您能否将MVC指向默认文件夹以外的文件夹(Views / Shared / EditorTemplates& Views / Shared / DisplayTemplates)?我想把它们放在那些下面的子文件夹中,或者放在共享文件夹之外的其他文件夹中。
例如,如果我在此文件夹下有一个编辑器模板:
〜\视图\订单\ ProductModel.cshtml
如何告诉我的EditorFor模板使用此tempalte名称?
我尝试完全限定它,但这不起作用:
@Html.EditorFor(m => m.ProductModel, @"~\Views\Order\ProductModel.cshtml")
我尝试使用正斜杠&反斜杠,有/没有.chstml,我能想到的每一个组合。我开始认为这不受支持,但我无法想象为什么它不会。
答案 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)
旧问题,但是...为特定控制器添加显示/编辑器模板的正确方法是将其添加到DisplayTemplates
或EditorTemplates
子文件夹中。
假设在您的示例中,您有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)
当然,编辑器模板的名称必须与集合中的项目类型相匹配。