44

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

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

~\Views\Order\ProductModel.cshtml

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

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

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

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

4

3 回答 3

55

不,恐怕你不能这样做。

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

那不再是编辑器模板。是片面的。如果你想在不同的控制器之间共享编辑器模板,你可以简单地将它们放在~/Views/Shared/EditorTemplates文件夹中。

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

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

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

于 2011-10-20T20:26:45.263 回答
4

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

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

~\Views\Order\DisplayTemplates\ProductModel.cshtml

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

@Html.DisplayFor(m => m.MyProductModelProperty)
于 2015-05-18T08:59:36.937 回答
3

如果你这样做:

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

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

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

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

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

于 2012-08-05T17:10:18.887 回答