【发布时间】:2013-04-03 23:06:06
【问题描述】:
我正在为我正在为大学电子邮件系统构建的网站上的用户帐户系统开发多类型用户配置文件编辑器。
我有 3 个视图模型 Administrator、Faculty、Student,它们继承自 Person 类。当它们使用EditorForModel() 在视图中显示时,它们显示正确的编辑器就好了,但是当我向控制器提交更改时,它们被解析为基类(我已经使用 Visual Studio 调试器验证了这一点)而不是正确提交的视图模型班级。因此,当它到达操作方法时,我会丢失重要的编辑器数据。在将其发布回控制器而不为每种模型类型创建完全独立的视图时,如何使其解析正确的类型?
【问题讨论】:
-
毫无疑问,您必须为此编写自定义模型绑定器。
-
如果不编写自定义模型绑定器就不能使用继承类型,那么编辑器的意义何在
-
不是
EditorFor调用决定了传递给 Action 方法的内容。当模型绑定器查看方法的签名时,它说“哦,看,Person对象,我将创造其中之一……”。请记住,服务器接收的所有内容都是表单发布的值。没有(默认)方法可以通知客户端编辑器模板类型。 -
试试这个:当你尝试使用
var vm = editorModelVM as Administrator获取Administrator视图模型时,vm是返回空值还是实例值?也许你只需要向上转型,这就是我的意思。
标签: c# asp.net .net asp.net-mvc asp.net-mvc-4