概述
我有一个支付页面,允许用户选择支付方式,信用卡或支票。我为每种付款方式都有一张表格。我不想为 UI 目的为这些方法中的每一个创建单独的页面,所以我为每个表单使用 [div] 并使用 jQuery 切换它们的显示。
问题
每种付款方式都有自己的一组验证规则。我希望能够仅将模型验证应用于用户选择并提交的付款方式。为了进行验证,我需要 POST 到同一个控制器操作,因此不能选择提交不同的操作。
方法
我考虑了以下方法:
- 基于传入值的部分验证,如下所述:http: //blog.stevensanderson.com/2010/02/19/partial-validation-in-aspnet-mvc-2/。我对这种方法的问题是安全隐患,因为这是一个相对较小的应用程序,我没有文章作者建议的单独的域层。
为每种支付方式创建单独的模型,然后使用不同的模型参数重载控制器 [HttpPost] 操作。我试过这个,但编译器抱怨这个动作是模棱两可的,即使我有这样的东西
[HttpPost]
public ActionResult Pay(CreditCardPaymentModel 模型) {...}[HttpPost]
public ActionResult Pay(CheckPaymentModel 模型) {...}使用单独的控制器操作来处理单个表单帖子,并使用 TempData 设置验证消息并重定向回表单页面以显示消息。我真的不喜欢这个选项,因为它感觉很笨重,而且我不喜欢将 TempData 用于除简单消息之外的任何内容。
我欢迎任何有关干净有效地处理这种情况的最佳方法的建议。