【问题标题】:Update TextBox Value on history back更新历史记录上的文本框值
【发布时间】:2013-08-20 09:28:17
【问题描述】:

我在设置 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 获得了新值。一切都很好。

问题是:如果我使用导航器中的历史回溯功能,则使用旧的“术语”值调用上一页,这很正常,该页面不是回发,我的代码进入 TB_MotCle.Text = ...; (我在调试模式下检查过),但是当页面刷新时,我仍然从历史记录的下一页获取值。

我不确定它是否清楚,所以会发生什么:我在我的页面上搜索“test1”,单击提交 -> 回发 -> 使用我的 url 中的值重定向 -> 页面显示“test1”。然后我对“test2”做同样的事情,页面刷新,我在文本框中得到“test2”。但是,如果我按回导航器,页面的 URL 包含“test1”(这是正常的),我将该值设置为 PageLoad 中的 TextBox 为“test1”,但我仍然在我的 TextBox 中看到“test2” .

我尝试禁用 ViewState,但没有成功。我能做什么?

【问题讨论】:

    标签: .net textbox postback viewstate


    【解决方案1】:

    这听起来像是一个缓存问题,而不是与 ViewState 相关的。您的浏览器正在检索即将离开之前的页面版本,而不是最初下载的版本。

    要解决这个问题,你需要告诉浏览器不要缓存页面; SO 问题How to control web page caching, across all browsers? 提供了许多应该适用于所有浏览器的解决方案。

    这意味着导航“返回”的人将被告知重新加载页面(从而触发您的 !Page.IsPostBack 代码),但不幸的是,这就是关闭缓存的本质。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-20
      • 1970-01-01
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      相关资源
      最近更新 更多