response.redirect を通じてラベルの値を保持するにはどうすればよいですか?
-
01-07-2019 - |
質問
状況は次のとおりです。ラベルのテキストセットがあり、その直後に次のように response.redirect() 呼び出しが続きます (これは単なる例ですが、私の状況を正確に説明していると思います)。
aspx:
<asp:Label runat="server" Text="default text" />
コードビハインド (onclick イベントで呼び出されるコード):
Label.Text = "foo";
Response.Redirect("Default.aspx");
ページがレンダリングされると、ラベルに「デフォルト テキスト」と表示されます。何を別の方法で行う必要がありますか?私の理解では、そのような変更は舞台裏で自動的に行われると考えていましたが、どうやらこの場合はそうではないようです。ありがとう。
もう少し背景を説明すると、分離コード スニペットは、onclick イベントで呼び出されるメソッド内で呼び出されます。まだまだありますが、この問題に関係のあるものだけを含めました。
解決
リダイレクト後は、コントロールに関連付けられている状態情報が失われます。ページを更新したいだけの場合は、リダイレクトを削除します。コードの実行が完了すると、ページが更新され、すべての状態が保持されます。
ASP.NET がページ上の非表示の入力フィールドに状態情報を書き込むため、これはバックグラウンドで機能します。ボタンをクリックすると、フォームがポストされ、ASP.NET がビューステートを解読します。コードが実行されて状態が変更され、その後状態が再び非表示フィールドに書き込まれ、サイクルが継続します。 POST なしでページを変更するまで. 。これは、別のページへのハイパーリンクをクリックしたとき、または指定された URL に従うようにブラウザに指示する Response.Redirect() 経由で発生する可能性があります。
他のヒント
あ Response.Redirect
この呼び出しは、指定した URL で指定されたページをロードするようにユーザーのブラウザに要求します。これはページに対する新しいリクエストであるため、ページはマークアップに含まれるテキストを利用します (ラベル テキストがボタン ハンドラーなどの内部に設定されていると想定しているため)。
を削除すると、 Response.Redirect
ページを呼び出すと、宣伝どおりに機能するはずです。
ASP と ASP.Net は、状態が明示的に指定されない限り、本質的にステートレスです。通常、ポストバック間のラベルの値などの情報はビューステートに含まれていますが、ページを変更すると、そのビューステートはページ上の非表示フィールドに格納されていたため失われます。
呼び出し間でラベルの値を維持したい場合は、状態メカニズムの 1 つを使用する必要があります (例:セッション、プリファレンス) または通信システム (リクエスト (GET、POST))。
さらに、バックグラウンドでページを処理するユーザーを変更する Server.Transfer を探している場合もあります。Response.Redirect は、ほとんどの場合、現在のコンテキストを無視するように設計されています。
状態を永続化するには、Response.Redirect の代わりに Server.Transfer を使用します。
したがって、私自身の質問に答えるとしたら (FAQ によれば、それが推奨されています)、簡単に言うと、リダイレクトを通じてビューステートを保持しないということです。ビューステートはリダイレクトではなくポストバック用です。
ボーナス: ASP.NET のビューステートについて知りたかったことすべて, 、画像付き!
価値があるものとして (そしてできれば何かの価値があると思いますが)、第 6 章 C# 2008 第 2 版の Pro ASP.NET 3.5 このテーマに関する素晴らしいリソースです。これまでのところ、本全体が素晴らしかったです。