Asp.Net - 页面刷新(F5)不恢复TextBox的初始值

时间:2009-09-04 05:41:19

标签: asp.net postback viewstate page-lifecycle

这是简单的代码:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        txt.Text = "Original";
    }
}
  1. 首次加载。文本框状态为“原始”。

  2. 手动将值更改为“Not Original”。

  3. 按F5。这一行:

    txt.Text =“Original”;

  4. 已执行,但输入值仍为“非原创”

    但是,当我点击进入地址栏时。该值将更改为“原始”。

    更多的starnge是当地址末尾包含'#'时(使用jquery点击..)

    然后,即使我点击地址栏,值仍为“非原创”

4 个答案:

答案 0 :(得分:12)

刷新(F5)ASP.NET页面时,它将重复最后一次采取的操作。因此,在您的情况下,如果您做的最后一件事是更改文本框值,则刷新将再次将文本框设置为该值。

然后,在地址栏中点击“enter”,指示您的浏览器放弃所有内容并完全全新地转到该页面。

“回发”表示您正在向自己提交(发布)页面。第一次加载页面时,IsPostBack是错误的,因为您只是在请求页面 - 而不是提交任何内容。但是,您在ASP.NET页面上执行的每个操作 - 一旦您在那里 - 就会将隐藏的表单提交到同一页面。 IsPostBack适用于后续请求。

最后,当地址栏中有“#”时,点击该URL上的输入将不会导致页面重新加载。这是因为#表示锚。如果您已经在“页面x”并尝试导航到“页面x #thing”,则页面将不会重新加载 - 它将保持在浏览器中,最多跳转到锚点,但不会重新加载。

答案 1 :(得分:2)

我昨天注意到IE(7)和Firefox(3.5)的差异!我用html创建了一个带有一些输入字段的表单,并且使用IE,刷新导致所有字段被设置回空白(默认状态)但是在FireFox中,刷新重新加载页面(包括我已完成的代码更改)但保留了我在田里写的价值观!在开发/测试时非常有用,所以我不需要每次都重写我的测试数据!

为了好奇,我刚刚在ASP.NET中编写了一个简单的测试,我注意到你为Firefox做的一样:点击刷新按钮保持更改的值,但是在地址栏中点击Enter,重新加载原始文本集在Page_Load。但在IE中,两种情况下的值都会重置为原始值!

至于不同案例之间的基本(不依赖浏览器)差异,Rex M的答案非常好。

答案 2 :(得分:1)

您使用的浏览器是什么?某些浏览器和插件尝试在不同情况下保留表单设置。

答案 3 :(得分:-1)

当您刷新(F5)ASP.NET页面时,它将重复上一次采取的操作。因此,在您的情况下,如果您做的最后一件事是更改文本框值,则刷新将再次将文本框设置为该值。

不,它不会,除非您在更改文本框中的值后触发了表单提交。