【发布时间】:2012-01-04 23:04:08
【问题描述】:
至少,我认为这与问题有关。我的情况是这样的:
我有许多具有公共字段的业务实体,每个实体都有该实体独有的自定义字段。所以在代码中,这被建模为一个EntityBase 类,并且有许多类派生自这个类,例如Derived。
为了制作可重用的 UI,我有一个名为 EntityBase.vbhtml 的视图,如下所示:
@ModelType EntityBase
@Using Html.BeginForm("Edit", Model.GetType.Name)
@* show the editor template for the derived type *@
@* !!the next line renders nothing!! *@
@Html.EditorFor(Function(x) Model, Model.GetType.Name)
[show a bunch of stuff common to all EntityBase objects]
End Using
然后为执行此操作的派生类调用 Derived.vbhtml:
@ModelType Derived
[show an EditorFor for various Derived-specific fields]
然后,当您导航到\Derived\Edit\123 时,它会返回默认视图Derived\Edit.vbhtml,它就是这样做的:
@Html.EditorForModel("EntityBase")
通过这种方式,控制器只返回预期的默认编辑视图,这是对EntityBase 视图的单行调用,它执行它的工作并调用Derived 来呈现它没有的派生类内容知识。
我认为这没什么特别的,但它不起作用。正如视图代码中所标记的,当我在基类视图中调用 EditorForModel 并指定派生类的名称以用作模板时,它不会呈现任何内容。我已经测试过,如果我在顶级编辑模板中调用这行完全相同的代码,它可以正常工作。所以有一些关于 MVC 不喜欢的继承,但我看不出是什么。请帮忙!
更新:如果我使用 Partial 代替 EditorFor(并将相应的模板从 EditorTemplates 文件夹移动到 Shared 文件夹),它可以正常工作,但这不是很好解决方案,因为我认为不遵循 EditorFor 模板的命名约定会令人困惑。
【问题讨论】:
标签: asp.net-mvc vb.net asp.net-mvc-3 razor editorformodel