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

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

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

〜\查看\订单\ ProductModel.cshtml

我怎么能告诉我的EditorFor模板使用这个tempalte的名字?

我试图完全排除它,但是这不起作用:

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

我已经尝试使用正斜杠和反斜杠,有/无.chstml,我可以想到的每个组合。 我开始认为这不被支持,但我无法想象它为什么不会。

不,恐怕你不能这样做。

例如,如果我有这个文件夹下的编辑器模板

这不再是一个编辑器模板。 这是一个部分。 如果你想在不同的控制器之间共享编辑器模板,你可以把它们放在~/Views/Shared/EditorTemplates文件夹中。

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

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

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

如果你这样做:

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

它不会将Fooparsing为一个集合,并将编辑器模板应用于每个项目。 它宁可假定您的编辑器模板应该被应用到整个集合。

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

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

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

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

假设在你的例子中,你有OrderController ,你可以简单地把你的模型的显示模板放到子文件夹中,像这样:

 ~\Views\Order\DisplayTemplates\ProductModel.cshtml 

然后,通常从你的视图调用显示模板(例如:〜\ Views \ Order \ Index.cshtml):

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