来自默认(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相匹配。
老问题,但是…为特定控制器添加显示/编辑器模板的正确方法是将其添加到DisplayTemplates
或EditorTemplates
子文件夹中。
假设在你的例子中,你有OrderController
,你可以简单地把你的模型的显示模板放到子文件夹中,像这样:
~\Views\Order\DisplayTemplates\ProductModel.cshtml
然后,通常从你的视图调用显示模板(例如:〜\ Views \ Order \ Index.cshtml):
@Html.DisplayFor(m => m.MyProductModelProperty)