3

MVC4 プロジェクトには、学校で学習した言語のインデックス ビューである部分ビューを含むフォームがあります。これはデフォルト タイプのビュー テンプレート インデックスで、行ごとに追加、削除、編集リンクなどがあります。追加または編集すると、言語の追加または編集ビューが開きます。たとえば、言語を追加した後、更新された部分ビューが返されます。

私の問題は、ユーザーが言語フォームを開くと、メイン フォームの編集とキャプチャが失われることです。メインフォームは部分的にしか完成しておらず、検証に失敗する可能性があるため、言語フォームを開く前に Ajax 保存を行うことはできません。私が考えているのは、AjaxPreserveを受け取り、それをセッションに保存するアクションを使用することですFormCollection(ディスク上の o、または任意の場所)。したがって、モデルのバインドとサーバーの検証は実行されません。

次に、2 つの問題があります。AJAX アクションを呼び出す前にクライアントの検証を無効にする必要があります。また、FormCollection以前に保存した を使用してメイン フォームを再作成する必要があります。クライアントの検証を無効にするための jQuery ブードゥー教がいくつかあるはずだと思いますが、フォームを再作成することに完全に困惑しています。

代替ソリューション:「サブフォーム」を使用する代わりに、FK ID が不要な pop-ip フォームでエディター テンプレートを使用できますが、それは特定の場合にのみ使用されるため、私の質問は依然として有効です。

4

4 に答える 4

2

JavaScriptモデルを作成してグリッド/ダイアログ編集/テンプレートビューにバインドするノックアウトのようなものを使用できますか。データ全体を JS モデルに変換し、それをテーブル/グリッドにバインドしてから、クライアント側ですべての変更を追跡します。すべてが完了したら、モデル全体をサーバーにシリアル化し、データ ストアを更新するだけです。これが許容できるシナリオであれば、多くの問題を回避できます。Knockout に精通している必要がありますが、以前に使用したことがある場合は、非常にクリーンで効率的な方法でこれを解決できます。

Knockout の Web サイトにあるこの例は、私が何を提案しようとしているのかを示しています。すべてのデータをサーバーに送り返すまで、編集、削除、追加はクライアント側で行われます。オブジェクトが追加、編集、または削除されたかどうかを知るには、各オブジェクトのフラグを追跡する必要があります。

http://knockoutjs.com/examples/contactsEditor.html

于 2013-02-05T19:43:16.527 に答える
1

javascriptを使用しないのはなぜですか?たとえば、いくつかのデータを保存するメインフォームがあります。また、言語のような特定のものを追加する必要がある場合は、部分ビューを使用してポップアップを開き、ユーザーがフォームに入力できるようにしますが、ユーザーが送信を押すと、js でアクションをインターセプトし、JavaScript 配列/オブジェクトなどに保存し、おそらくそれをメインフォームの非表示フィールド - 最終送信用

var newData = new Object();
newData.Field1 = $("#yourField1");
...
lanuageData.push(newData);
$("#languageContainer").val(JSON.stringify(languageData));
...

ここでも DataAnnotation 検証は次のように機能します。

$.validator.unobtrusive.parse("your_partial_view_container");

js 配列に既に追加されているオブジェクトを編集する必要がある場合は、ポップアップを開き、js 配列の要素を入力します。したがって、基本的にはクライアント側ですべての CRUD を実行し、最終送信時にのみ変更を保存します。コントローラーのコードをより明確にするために、カスタム モデル バインダーを使用して、JSon から List またはその他の種類のオブジェクトに文字列フィールドを逆シリアル化することができます -> サーバー側で検証できるようにします。

于 2013-02-08T13:29:40.480 に答える
1

Ajaxを使用して言語を追加するためのサブリクエストを作成し、ドロップダウンを再入力するか、正常に保存されたメインフォームで言語を受け入れる方法を簡単に作成します。

*これにより、多くの労力が節約されます。*

于 2013-02-08T11:14:36.137 に答える
0

値をローカル ストレージに保存することは許容できますか? TempData の使用についてはどうですか?

于 2013-02-01T21:29:44.820 に答える