Asp.net MVC模型绑定派生类



我已经编写了一个抽象类PaymentMethod和两个派生类PaymentMethodInvoicePaymentMethodBilling。我为他们每个人都编写了共享EditorTemplates

GET运行良好,我选择我的PaymentMethod并获得正确的表单。如果我发布这个表单,模型绑定不起作用,它会尝试实例化抽象类PaymentMethod

我必须重写CreateModel protected override object CreateModel吗?或者有更好的解决方案来处理这个问题吗?

我必须覆盖CreateModel 吗

没有。

或者有更好的解决方案吗

没有。

在执行方法中的任何代码之前,DefaultModelBinder通过首先初始化模型的实例,然后读取客户端发送的名称/值数据(表单数据、查询字符串值等)来绑定模型。如果它在模型中找到匹配的属性名称,它将尝试设置该属性的值。在您的情况下,它初始化PaymentMethod的一个实例,因此即使您可能会发布与某个派生类相关联的附加值,它们也会被丢弃。

当然,您可以在方法中编写代码来手动读取Request.Form值,根据这些值确定要使用哪个派生类,初始化它,并设置它的值。但是,您不仅会在方法中添加大量丑陋的代码,还会错过模型绑定的所有内置功能,如ValueProviders、设置ModelState值和错误等,这些都是您需要实现的。

坚持推荐的方法,创建一个覆盖CreateModel() 的自定义模型绑定器

相关内容

  • 没有找到相关文章

最新更新