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

Jer*_*ose 42 asp.net-mvc asp.net-mvc-templates asp.net-mvc-3

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

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

〜\查看\订单\ ProductModel.cshtml

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

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

@Html.EditorFor(m => m.ProductModel, @"~\Views\Order\ProductModel.cshtml")
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*rov 53

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

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

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

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

@Html.EditorFor(x => x.Foo, "Order/ProductModel")
Run Code Online (Sandbox Code Playgroud)

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

  • 这是有道理的.我不知道你可以在控制器的视图文件夹下面有Editor/DisplayTemplate文件夹.这完成了我想要做的事情.谢谢达林. (7认同)

Nen*_*nad 5

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

假设在您的示例中,您有OrderController,您可以简单地将模型的显示模板放入子文件夹中,如下所示:

~\Views\Order\DisplayTemplates\ProductModel.cshtml
Run Code Online (Sandbox Code Playgroud)

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

@Html.DisplayFor(m => m.MyProductModelProperty)
Run Code Online (Sandbox Code Playgroud)