[英]Asp.net MVC Model binding derived class
我编写了一个抽象类PaymentMethod
和 2 个派生类, PaymentMethodInvoice
和PaymentMethodBilling
。 对于他们中的每一个,我都编写了共享的EditorTemplates
。
GET 工作正常,我选择我的PaymentMethod
并获得正确的表格。 如果我 POST 此表单模型绑定不起作用,它会尝试实例化抽象类PaymentMethod
。
我必须覆盖 CreateModel protected override object CreateModel
还是有更好的解决方案来处理这个问题?
我必须覆盖 CreateModel
不。
或者有更好的解决方案
不。
在执行方法中的任何代码之前, DefaultModelBinder
通过首先初始化模型的实例然后读取客户端发送的名称/值数据(表单数据、查询字符串值等)来绑定模型。 如果它在您的模型中找到匹配的属性名称,它将尝试设置该属性的值。 在您的情况下,它初始化PaymentMethod
一个实例,因此即使您可能发回与派生类之一关联的其他值,它们也只是被丢弃了。
您当然可以在方法中编写代码来手动读取Request.Form
值,从这些值中确定要使用哪个派生类,对其进行初始化并设置其值。 但是,您不仅会在方法中添加大量难看的代码,还会错过模型绑定的所有内置功能,例如ValueProviders
、设置ModelState
值和错误等,您还需要实现这些功能。
坚持推荐的方法并创建一个覆盖CreateModel()
的自定义模型绑定器
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.