0

これはMVC3Webアプリケーションです。共有ビューでは_Layout.cshtml、左ナビゲーションの右側にページをロードするための左ナビゲーションツリーがあります。ツリーリストアイテムをクリックするたびに、ページが更新され、同じレイアウトビューで適切なページが読み込まれます。

この_Layout.cshtmlには、ツリーの下にSelect Categoryリンクと空のdiv(targetDiv)があります。[カテゴリの選択]リンクをクリックすると、Webグリッドを使用してjQuery UIモーダルダイアログが開き、すべての「カテゴリ」が表示されます。テーブル内の「category」リンクをクリックすると、ダイアログが閉じ、targetDivがAJAXによって再ロードされるため、targetDiv内のwebgridがこの「category」内のすべての「books」にデータを入力します。

また、ユーザーが左ナビゲーションアイテムをクリックすると、ページ全体がリロードされます。したがって、選択した「カテゴリ」の「本」リストを保持する必要があります。このために、モーダルダイアログで「カテゴリ」が選択されたときにCookie(CategoryId)を保存します。ページのリロード(ドキュメントの準備ができている)で、_LayoutページでこのCookieを使用しています。これにより、この「カテゴリ」のすべての「本」が再び表示されます。

これは正常に機能していますが、新しい要件は、複数の「カテゴリ」での作業を許可することです。ブラウザの1つのタブで[カテゴリ1]を選択し、このカテゴリですべての書籍を取得すると、次のタブ(同じアプリの別のインスタンス)で、別の「カテゴリ」とそのコレクションの別のコレクションで作業できるようになります。本。この場合、Cookieはすべてのタブで共有されているため、Cookieを使用できません。

異なるインスタンス(ブラウザタブ/ウィンドウ)に異なる「カテゴリ」を設定するにはどうすればよいですか?

4

2 に答える 2

1

私があなたの質問を正しく理解している場合、最も簡単な方法は、targetDiv毎回ページをリロードするのではなく、AJAXポストバックを使用してフィールドにデータを入力することです。次に、ページの関連部分のみをロードするので、タブが互いに干渉することなく、必要な数のタブを一度に開くことができます。

MVC3は、AJAXリクエストに対して多くのサポートを提供します。グリッドを描画するものを部分ビューに配置するだけで、ユーザーがさまざまなオプションを選択したときに簡単に変更できます。

AJAXリクエスト全体で状態を維持するために、フォームフィールドに保存し、リクエスト時に値を渡すことができます。これを行うには、AjaxFormを使用してリクエストとともに送信するか、リクエストを追加する方法がいくつかあります。フォームの実装方法に応じて、JQueryを使用したリクエストへのパラメーター。現在のCategoryIdを非表示フィールドとして保存し、作成時にリクエストに追加することができます。1つのページで複数のカテゴリを開いている場合は、同じ名前の非表示フィールドのリストをチェックボックスグループのように動作させるか、非表示フィールドにリストをエンコードすることでうまくいくはずです。

于 2012-07-17T13:28:06.807 に答える
0

私はこの問題を解決しました。JavaScriptでCookieのないセッション変数を使用しました。window.name基本的に、ページをリロードしたときにクリアされないプロパティにデータを保存します。そして、すべてのタブには異なるwindowオブジェクトがあり(これが私が欲しいものです)、すべての主要なブラウザーでサポートされています。

これはセッションCookieと同じですが、唯一の違いは、このデータが通常のセッションCookieのようにウィンドウ/タブ間で存続しないことです。

Cookieなしのセッション変数も参照してください。

于 2012-07-19T10:39:26.863 に答える