0

私は3つのセクションを持つアプリを持っています:

  • メインメニュー;
  • コンテキスト メニュー - メイン メニューで選択した項目に関連します。
  • ページ本文 - コンテキスト メニューで選択された項目に関連します。

「メイン メニュー」と「コンテキスト メニュー」はメンバーシップに基づいています。リソースデータベースを消費するため、ページが読み込まれるたびにそれらを読み込みたくありません。そのため、ajax を使用してメイン メニューを 1 回だけロードし、アイテムが選択されると、そのアイテムのコンテキスト メニューをロードします。

私の問題は次のとおりです。すべてのフォームの投稿でメニューが消去されます。

質問: ajax を使用してアプリケーション全体をビルドする必要がありますか? フォームに投稿してから、すべてのデータをajaxでコントローラーに送信するのは簡単すぎるため、私はそれをしたくありません。

これまでのところ、2 つのオプションがあります。

  1. メニューをajaxでロードし、ページ本文をIFRAMEでロードして、投稿がメニューを再度レンダリングしないようにします。
  2. ajax を使用してすべてを行います。

メニューを ajax でロードして、フォームの投稿を使用できるようにする代替手段はありますか?

わかりにくかったらすみません。

4

2 に答える 2

1

私を一時停止させたのは、「リソース データベースを消費するため、ページが読み込まれるたびにそれらを読み込みたくありません」という文です。

ご覧のとおり、私はユーザーの役割 (メンバーシップと呼ばれるもの) に基づいてメニューとサブメニューを表示する、非常に多くのアプリを構築してきました。これは、リソースまたはデータベースの観点からは決して問題ではありません。

ユーザーがログインしているときに、一度必要なすべてのメンバーシップ情報にアクセスできます。最も単純なケースでは、ユーザーの ID は、ユーザーが持つロール (HttpContext.User) と共にコンテキストに格納されるため、必要ありません。すべてのリクエストでこの情報を取得するためのデータベースルックアップ。このシナリオでは、ajax も必要ないことに注意してください。

何らかの理由でメンバーシップ情報をこのようなコンテキストに保存できない場合でも、セッション内 (メモリ内の場合) または暗号化された Cookie に保存できます。

さて、私はあなたのシナリオのすべての詳細を理解しているわけではなく、あなたがやろうとしていることはあなたのシナリオで正当化されるかもしれませんが、通常の状況ではあなたが示していることは問題 (データベース リソース) はまったく問題にならないはずです。

肝心なのは、ユーザーがログオンしたときにメンバーシップ情報を保存するようにアプリケーションを変更すると、最初から問題が発生することはありません。

于 2013-02-07T05:21:09.707 に答える
0

すべてのアプリケーションを Ajax を使用して構築する必要はありません。しかし、このシナリオでは Ajax が最善の方法かもしれません。

以下は私の提案です

  1. dev 内のデータ エントリを作成する
  2. 各入力コントローラーをクラスでマークします (「dataEntry」など)。
  3. dev を反復し、クラス dataEntry を持つすべての要素のリストを作成する JavaScript 関数を作成します。
  4. リストを使用して json オブジェクトを作成します。各要素の名前をプロパティ名として使用し、値をプロパティ値として使用します
  5. jquery ajax を使用して、これをコントローラー アクションにポストします。
  6. [オプション] .done および .fail メソッドを使用して、呼び出しの成功または失敗に対してアクションを実行できます

これは難しそうに見えるかもしれませんが、データ入力フォームが多数ある場合は、このコードを再利用できます。

于 2013-02-07T04:43:48.983 に答える