2012-03-12 16 views
1

ポストバックにいくつかのテキストを保存する必要がありますが、サーバの配列に対する非粘着性の負荷分散のために、これをサーバーセッションに保存することはできません。私はASP.Netポストバック間の状態

Response.Redirect(Request.RawUrl); 

を持ってポストバックの終わりに

これはリダイレクトされますので、それが出ているので、私は、すべてのブラウザで確実にクッキーを設定することはできません(4096文字制限が問題である可能性があり

私が考えることのできる唯一のオプションは、クエリパラメータを使用することですが、保存されるデータは2048文字以上になる可能性があります。

結果をデータベースに格納する以外に解決策はありますか?

+0

あなたは中間にあなたを連れて行くようにJavascriptまたはMeta Refreshを使うことができますリダイレクト(クライアント側とサーバー側)を行い、Cookieを使用することができます。 –

+0

負荷分散されたすべてのサーバーで共有される状態サーバーを使用できますが、これはおそらく実行できないインフラストラクチャの変更です。 –

+0

URLを変更する必要がありますか、Server.Transferを使用できますか? – ptfaulkner

答えて

0

Viewstateが機能する場合があります。保存/このような値取得:

ViewState["MyNumericValue"] = myNumericValue; 
//at next postback 
myNumericValue = (int)ViewState["MyNumericValue"]; 

ビューステートがそのように問題になりますが、HTTPのPOSTを確保する必要がある値ではなくGETを(維持するために、ページ上のHTMLの隠しフィールドに格納されているが。あなたはResponse.Redirectをはむしろ、このようなJavaScriptからフォームを投稿言う必要がある場合:

document.forms["myform"].submit(); 

問題が解決しない場合は、ページの大きさや影響に応じて、あなたの負荷を作るために喜んでいます高速であれば、response.redirectではなくjavascriptでリダイレクトをトリガーすることができます。これは、クッキーを最初に設定してリダイレクトすることを意味します。クッキーに保存することは不可能であり、データベースに保存する必要があると私は言います。

0

あなたの唯一の適切な解決策は、ASP.NETセッション状態functionailtyを使用することです。これは実際にビルドされたものです。あなたは、単には、セッション状態を格納するためにではなくDBよりもメモリキャッシュで共有使用することができ、あなたの非DBの要件については

、すでにASP.NETのセッションではうまく機能その中から選択するいくつかあります:

はい、学習曲線があるが、あなたはそれを後悔しないように、あなたがそれを設定した後、これはあなたの自由のESの多くを提供します特にロードバランサと非粘着セッションに対処する場合、それは確かに価値があります。あなたのテキストを設定していると、あなたは

Server.Transfer("myexcitingUrl"); 

を呼び出し、先Page_Loadメソッドにすることができます次に

public string SomeTextINeed { get; set; } 

:あなたのソースページのいくつかのパブリックプロパティを設定することができServer.Transferをを使用して

1

あなたのテキストを確認してください:

SourceWebForm1 webform = Context.Handler as (SourceWebForm1); 
string someTextINeed = webform.SomeTextINeed; 
+0

これはいいと思いますが、Server.Transferの後にページを更新するたびに、フォームの再送信に関するWebブラウザの警告が表示され、何らかのアクションが繰り返される可能性があります。これを防ぐ方法はありますか? –

+0

いいえ、私が知っているわけではありません。 Asp.netイベントの性質は、フォームのサブミットを引き起こします。だから、あなたはブラウザをリフレッシュした後、この種のものを手に入れようとしています。リフレッシュを許可する必要がある場合、server.transferはあなたの答えではありません。 – ptfaulkner

関連する問題