1

Page_Unload イベントで値を保存し、それを Session (または ViewState) に保存してから、javascript から使用しようとしています。ただし、セッションの値はポストバック/ページの更新後にのみ更新されますが、ページの更新を避ける必要があります。どうすればこれを達成できますか?

例:

.cs

public void Page_Unload(object sender, System.EventArgs e)
{
    string s="some text";
    if (s.Contains("foo")) Session["bar"] = 37; else Session["bar"] = 38;
}

.aspx

<script type="text/javascript">
   function tst() {
     alert('<%=Session["bar"]%>');
   }
</script>
4

3 に答える 3

2

Page_Unload イベントが遅すぎて、セッション状態に新しい値を割り当てることができません。

代わりに、Page_PreRender イベントを使用します。

protected void Page_PreRender(object sender, EventArgs e)
{
   string s="some text";
   if (s.Contains("foo")) Session["bar"] = 37; else Session["bar"] = 38;
}

ここに画像の説明を入力

于 2013-09-30T14:57:33.350 に答える
1

まず、イベントのライフサイクルを理解するのに役立つページがあります。http://msdn.microsoft.com/en-us/library/ms178472(v=vs.100).aspx#general_page_lifecycle_stages .

ページがレンダリングされると、 <%=Session["bar"]%> は現在の値に置き換えられます。ページがまだ「アンロード」されていないため、この値は更新されていません。つまり、この値は JavaScript コードの実行時に読み取られるのではなく、ページがレンダリングされるときに読み取られます。試みていることを達成するには、Unload イベントではなく、Pre_Render で値を設定する必要があります。

Pre_Render が機能しない場合は、非同期メソッド呼び出しと AJAX を組み合わせてコードに値を取得するソリューションを想像できます。これがどのように機能するかについては、http: //msdn.microsoft.com/en-us/library/bb398998.aspxを参照してください。具体的には、あなたが説明していることを正確に実行している最後のセクションを見てください (つまり、クライアント スクリプトからセッション値を取得します)。

  1. ページにスクリプト マネージャーを追加します。
  2. PageMethods プロパティを true に設定します
  3. 「まだ作業中」と「完了」のフラグをセッションに追加します
  4. Pre_Render の非同期デリゲートを使用して、長時間実行されるプロセスを呼び出して値を取得します。
  5. 非同期コールバックでセッション値を設定し、新しいフラグを「完了」に設定します
  6. ページのアンロードで、非同期デリゲート「EndXXX」メソッドを呼び出します。
  7. フラグの値をチェックするパブリック静的メソッドを作成し、「完了」に設定されている場合は、必要なセッション値を返します。
于 2013-09-30T14:57:54.223 に答える