pageX.aspxとpageY.aspxの 2 つのページが あるとします。これらのページは、ブラウザーの上部にあるマスター ページを使用します。ユーザーは、サイトの言語を変更するためのいくつかのオプションを利用できます。これらの言語の選択はイメージ ボタン (国のフラグ) の形式ですが、PostbackUrl プロパティは使用しません。代わりに、イベント ハンドラーを使用するだけです。そのような画像ハンドラの 1 つ:
protected void imgbtnEnglish_Click(object sender, ImageClickEventArgs e)
{
HttpCookie aCookie = new HttpCookie("language");
aCookie.Value = "en-US";
aCookie.Expires = DateTime.Now.AddDays(365);
Response.Cookies.Add(aCookie);
Response.Redirect(Request.RawUrl);
}
pageX.aspxには、プロパティを持つ画像ボタンが含まれていますPostbackUrl="pageY.aspx"
。この画像ボタンの唯一の目的は、pageY.aspxに移動することです。
その画像ボタンが押されると、予想どおり、pageY.aspxに移動します。
ここに謎があります。ブラウザで BACK (コントロールでも何でもなく、古き良き戻るボタン) を押すと、pageX.aspxに戻ります。上部のページは、私がまだpageY.aspxにいると考えています! 画面上のpageX.aspxに戻ったとしても、上部のフラグのいずれかをクリックすると、pageY.aspxに戻るからです。
私が論理的に推測できる唯一のことは、何らかの理由で、それは PostbackUrl であり、サーバーにフォームを送信するため、「戻る」ことは、ページ全体ではなく、送信されたフォームに対してローカルでのみ認識されるということです (マスター ページ)。したがって、「戻る」ことによって、実際にはフォームとマスターページではなく、フォームのみで「戻る」だけです。
問題を解決するために私がしたことは、pageY.aspx に移動するイメージ ボタンをPostbackUrlではなく、1 行の Click イベント ハンドラーにすることです: Response.Redirect("pageY.aspx"); これを行うと、うまく機能します。
これが発生する理由と、PostbackUrl プロパティを使用する代わりに Click イベント ハンドラー ソリューションがベスト プラクティス/適切なソリューションであるかどうかを理解したいと思います。