更新历史记录中的TextBox值

时间:2013-08-20 09:28:18

标签: .net textbox postback viewstate

我在设置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中显示该值。 我有一个验证页面的按钮,最后重定向到带有参数的同一页面(包括“term”)。

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获取新值。一切都很好。

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

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

我尝试禁用ViewState但它不起作用。我该怎么办?

1 个答案:

答案 0 :(得分:1)

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

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

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