做项目的时候遇到了一个问题,就是同一类,但是不同字段的视图显示不太一样,验证不太一样,因此共同的部分抽取出了基类,其他的继承了基类,但是模型逻辑字段都是差不多的,因此希望视图和Controller的逻辑都希望能实现多态。
搜索stackoverflow, http://stackoverflow.com/search?q=asp.net+mvc+Polymorphism
1. http://stackoverflow.com/questions/15120425/asp-net-mvc-viewmodels-polymorphism同我的问题,但是没有合适的答案。
2. 另一个问题和答案中写到这个问题没有合适的解决方案,已经被人用各种方式问过和尝试过了。但是这个问题说得是界面的多态。
据说用metadatatype可以解决model用同个抽象类,不同的验证。但是自己试了下发现仍然报错。
model binder来解决问题,最后发现可行,按照上面链接的解决方案(不是问题本身)描述的完全可以解决问题。
这个最后解决的方案是不同的model用不同的视图,用不同的@model,但是在controller时统一逻辑,用同一个action,通过自定义的model binder来实现不同的模型映射到不同的实例中。
PS:上述最后链接中有人提到还可以在其他情况下适用性更高的解决方案, http://maciejlis.com/asp-mvc-3-model-binder-with-abstract-class-support/,不过这个链接内容没有细看,因为原先的问题答案已经可以解决我的问题了。留着以备将来看。