0

状況は次のとおりです: ラベルのテキスト セットがあり、すぐに次のように response.redirect() 呼び出しが続きます (これは単なる例ですが、私の状況を正確に説明していると思います)。

aspx:

<asp:Label runat="server" Text="default text" />

コード ビハインド (onclick イベントで呼び出されるコード):

Label.Text = "foo";
Response.Redirect("Default.aspx");   

ページがレンダリングされると、ラベルに「デフォルト テキスト」と表示されます。他に何をする必要がありますか?私の理解では、そのような変更は舞台裏で自動的に行われるということでしたが、どうやらこの場合はそうではないようです。ありがとう。

少し余分な背景として、コード ビハインド スニペットは、onclick イベントで呼び出されるメソッド内で呼び出されます。他にもありますが、この問題に関連するものだけを含めました。

4

6 に答える 6

3

呼び出しは、指定した URL で指定されたページをロードするResponse.Redirectようにユーザーのブラウザーに要求します。これはページに対する新しいリクエストであるため、ページはマークアップに含まれるテキストを利用します (ラベル テキストはボタン ハンドラなどの内部に設定されていると想定しているため)。

呼び出しを削除するResponse.Redirectと、ページは宣伝どおりに機能するはずです。

于 2008-09-19T17:17:24.627 に答える
1

状態を保持するには、Response.Redirect の代わりに Server.Transfer を使用します。

于 2008-09-19T17:46:27.753 に答える
1

ASP と ASP.Net は、状態が明示的に指定されない限り、本質的にステートレスです。通常、ラベルの値などのポストバック情報はビューステートに含まれていますが、ページを変更すると、ページの非表示フィールドに格納されていたため、ビューステートが失われます。

呼び出し間でラベルの値を維持したい場合は、状態メカニズム (セッション、設定など) または通信システム (要求 (GET、POST)) のいずれかを使用する必要があります。

さらに、舞台裏で誰がページを処理しているかを変更する Server.Transfer を探しているかもしれません。Response.Redirect は、ほとんどの場合、現在のコンテキストを破棄するように設計されています。

于 2008-09-19T17:16:24.863 に答える
1

リダイレクト後、コントロールに関連付けられた状態情報はすべて失われます。ページを更新するだけの場合は、リダイレクトを削除してください。コードの実行が完了すると、ページが更新され、すべての状態が保持されます。

これは、ASP.NET が状態情報をページの非表示の入力フィールドに書き込むため、バックグラウンドで機能します。ボタンをクリックすると、フォームが送信され、ASP.NET がビューステートを解読します。コードが実行され、状態が変更されます。その後、状態が非表示フィールドに再度書き込まれ、 POST なしでページを変更するまでサイクルが続きます。これは、別のページへのハイパーリンクをクリックしたとき、またはブラウザに指定された URL に従うように指示する Response.Redirect() を介して発生する可能性があります。

于 2008-09-19T17:19:10.207 に答える
0

それだけの価値がある (そして、何か価値があることを願っています) ために、Pro ASP.NET 3.5 in C# 2008, Second Editionの第 6 章は、このテーマに関する素晴らしいリソースです。これまでのところ、本全体が素晴らしいものでした。

于 2008-09-26T23:04:02.273 に答える
0

したがって、私自身の質問に答えることができる場合 (FAQ によると、それが推奨されます)、短い答えは、リダイレクトを通じてビュー ステートを保持しないということです。ビュー ステートは、リダイレクトではなく、ポストバック用です。

おまけ: ASP.NET の View State について知りたいと思ったことすべてを、写真付きで紹介します!

于 2008-09-19T17:23:38.310 に答える