概要
ユーザーがクレジットカードまたは小切手のいずれかの支払い方法を選択できる支払いページがあります。これらの支払い方法ごとにフォームがあります。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 を使用するのも好きではありません。
このような状況をクリーンかつ効率的に処理するための最善の方法についての提案を歓迎します.