response.redirect を通じてラベルの値を保持するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/103765

  •  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 このテーマに関する素晴らしいリソースです。これまでのところ、本全体が素晴らしかったです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top