【问题标题】:Asp.Net - page refresh(F5) do not restore the initial value of TextBoxAsp.Net - 页面刷新(F5)不恢复TextBox的初始值
【发布时间】:2009-09-04 05:41:19
【问题描述】:

这是简单的代码:

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

  2. 手动,将值更改为“非原创”。

  3. 按 F5。行:

    txt.Text = "原创";

已执行但输入值保持“非原始”

但是,当我按回车键进入地址栏时。该值更改为“原始”。

更多的问题是地址末尾包含“#”(使用 jquery click..)

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

【问题讨论】:

    标签: asp.net postback viewstate page-lifecycle


    【解决方案1】:

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

    但是,在地址栏中点击“回车”会指示您的浏览器放弃所有内容并转到全新的页面。

    “回发”表示您正在向自身提交(发布)页面回。第一次加载页面时,IsPostBack 为 false,因为您只是在请求页面 - 不提交任何内容。但是,您在 ASP.NET 页面上执行的每项操作(一旦您到达那里)都会将隐藏的表单提交到同一页面。 IsPostBack 对那些后续请求为真。

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

    【讨论】:

    • 硬刷新(CRTL + F5)怎么样?这不应该像一个新请求一样工作吗?
    • @Eddie CTRL-F5 仍然重复上一个操作,但也会告诉浏览器更新所有缓存的资产。
    【解决方案2】:

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

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

    至于不同情况下的基本(不依赖于浏览器)差异,Rex M 的回答非常好。

    【讨论】:

    • 是的,我在 Firefox 中也看到了这一点。我认为 FF 这样做是为了避免丢失用户输入的内容。ari 的问题没有提到任何关于发回表单的内容,所以我认为 Rex M 可能正在描述不同的场景。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

      • @chris - 不正确。你不知道你在说什么。
      猜你喜欢
      • 2011-05-13
      • 1970-01-01
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 2023-03-27
      • 2017-11-27
      • 1970-01-01
      相关资源
      最近更新 更多