0

TextBox の Text プロパティの設定に問題があります。ここにコードの一部があります:

protected void Page_Load(object sender, EventArgs e)
{ 
    ...
    if (!Page.IsPostBack)
    {
        string termRequest = Request["term"];
        if (termRequest != "*:*")
        {
            TB_MotCle.Text = termRequest;
        }
    }
    ...
}

そのため、URL からパラメーターを取得して、その値を TextBox に表示しようとしています。ページを検証し、パラメーター (「用語」を含む) を使用して同じページにリダイレクトするボタンがあります。

protected void BTN_Rechercher_Click(object sender, EventArgs e)
{
    ...
    if (string.IsNullOrEmpty(TB_MotCle.Text))
    {
        sb.Append("?term=*:*");
    }
    else
    {
        sb.Append(string.Concat("?term=", HttpUtility.UrlEncode(TB_MotCle.Text)));
    }
    ...
    Response.Redirect(sb.ToString());
}

したがって、リダイレクトは PostBack なしでページを呼び出し、!Page.IsPostBack の最初のコードが呼び出され、TextBox が新しい値を取得します。すべて順調。

問題は次のとおりです。ナビゲーターから History Back 機能を使用すると、前のページが呼び出され、古い「term」値で呼び出されます。これは正常です。ページはポストバックではありません。私のコードは TB_MotCle.Text = ... に入ります。 ; (デバッグモードでチェックしました)が、ページが更新されると、履歴の次のページから値が取得されます。

明確かどうかわからないので、何が起こるかは次のとおりです。ページで「test1」を検索し、送信をクリックします->ポストバック-> URLの値でリダイレクトします->ページに「test1」が表示されます。次に、「test2」で同じことを行い、ページを更新すると、TextBox に「test2」が表示されます。しかし、ナビゲーターを押し戻すと、ページの URL に「test1」が含まれています (これは正常です)。その値を PageLoad の TextBox に「test1」に設定しましたが、TextBox に「test2」が表示されます。 .

ViewState を無効にしようとしましたが、うまくいきませんでした。私に何ができる ?

4

1 に答える 1

1

これは、ViewState 関連ではなく、キャッシュの問題のように思えます。お使いのブラウザは、最初にダウンロードしたバージョンではなく、移動する直前のバージョンのページを取得しています。

これを修正するには、ブラウザにページをキャッシュしないように指示する必要があります。SO の質問すべてのブラウザーで Web ページのキャッシュを制御する方法は? は、すべてのブラウザで機能するソリューションを多数提供しています。

これは、「戻る」操作を行っている人がページをリロードするように指示されることを意味します (したがって、!Page.IsPostBackコードがトリガーされます) が、残念ながらそれがキャッシュをオフに切り替える性質です。

于 2013-08-20T09:37:32.760 に答える