この例のような機能要件があります。
- 「市民権」は、「南アフリカ市民」、「非南アフリカ、労働許可あり」、「非南アフリカ、労働許可なし」の3つのラジオボタンで構成されています。
「労働許可番号」は15文字に制限されたフリーテキストフィールドであり、「市民」フィールドで「非南アフリカ、労働許可あり」が選択された場合にアクティブになります。
この場合は「市民権」など、他のモデルプロパティに基づいて、含まれているエディタを有効または無効にする「作業許可番号」などのフィールドエディタ用の汎用コンテナを作成したいと思います。これは、最初に取得するときに非常に簡単に実現できます。ビューモデルをレンダリングします。
ただし、ユーザーが「市民権」の値を変更するなどすると、事態は複雑になります。UIフィールドのみが変更され、モデルプロパティは変更されていませんが、「作業許可番号」が有効かどうかを決定するコンテナは、モデルプロパティに依存しています。
私はこれに対する2つの解決策しか見ていません:
クライアント側(JavaScriptの可能性があります)のビューモデルを使用し、サーバー側のビューモデル、場合によってはKnockout.jsシナリオから構築します。次に、通常のフォーム送信をバイパスして、クライアント側モデル全体を一度に送信します。
ユーザーが「Citizenship」値を変更したときにajax呼び出しを使用してサーバー側モデルを更新し、「Citizenship」値に依存するすべてのビューパーツを更新します。これは、「動作中」と「コミット済み」のモデルサーバー側が必要になるため、事態を複雑にします。「市民権」などの小さな変更のみを保持し、ユーザーが[保存]をクリックすると、すべての変更を「コミット済み」モデルに移動してデータストアに保持するための作業モデル。
私が何を意味するのかを理解している人のために、これを達成するために他にどのような手段を使用できますか、または上記で概説した手法をどのように改善できますか?