您可能知道,ASP.NET MVC 支持视图中模型字段的自定义视图覆盖。Views
在名为的文件夹中有特殊文件夹Views\Shared\EditorTemplates
,Views\Shared\DisplayTemplates
依此类推,这些文件夹可以包含类似的文件,这将覆盖在带有字段的模型的视图中Views\Shared\EditorTemplates\String.cshtml
调用时使用的默认视图。@Html.EditorFor
String
我想做的是将此功能用于自定义类型的模板。我想要一个这样的文件夹Views\Shared\GroupTemplates
,其中可能包含例如Views\Shared\GroupTemplates\String.cshtml
and Views\Shared\GroupTemplates\Object.cshtml
,并且我想创建一个HtmlHelper
允许我调用 example 的方法,如果是属性,Html.GroupFor(foo => foo.Bar)
它将加载模板,否则加载模板。String.cshtml
Bar
String
Object.cshtml
预期行为的完整示例;如果Views\Shared\GroupTemplates\String.cshtml
包含这个:
@model String
This is the string template
...并Views\Shared\GroupTemplates\Object.cshtml
包含以下内容:
@model Object
This is the object template
我有一个模型:
class Foo
{
public bool Bar { get; set; }
public String Baz { get; set; }
}
和类似的观点Views\Foo\Create.cshtml
:
@model Foo
@Html.GroupFor(m => m.Bar)
@Html.GroupFor(m => m.Baz)
当我渲染视图Create.cshtml
时,结果应该是这样的:
This is the object template
This is the string template
应该如何GroupFor
实施?