【问题标题】:IsPostBack always returns falseIsPostBack 总是返回 false
【发布时间】:2011-09-30 15:25:03
【问题描述】:

我遇到了一个奇怪的问题。每次我刷新页面,IsPostBack 都是假的。
为了确保我的内容或母版页中没有任何内容导致此问题,我创建了一个空 Web 表单并在调试模式下启动它。不过,在回发时,我将 IsPostBack 设置为 false。

我在 web.config 中有 enableSessionState="true"<sessionState timeout="30" />

快把我逼疯了!

更新:我按 F5 刷新页面。根据答案,这不应导致回发。我想知道用户何时刷新页面(甚至手动)并防止对 db 进行一些修改。
有解决办法吗?

【问题讨论】:

  • 你有enableviewstate吗?设置
  • 当您说refresh the page 时,您的意思是手动还是实际通过单击按钮等服务器端控件?
  • 是的,我已将 enableViewstate 设置为 true
  • @Kamyar - 按 F5 不会导致回发,因此您的代码没有问题。 (检查答案)
  • 听起来您需要一些其他机制来检测页面是否已刷新,例如计数器。 Viewstate, Session, hidden field - 有很多选项。

标签: asp.net postback session-state asp.net-4.0 ispostback


【解决方案1】:

刷新页面(按 F5 或浏览器中的刷新按钮)不是回发。当单击按钮、更改下拉菜单或页面上导致数据发送到服务器的其他事件(通过 HTTP POST,因此名称为“postback”)时,就会发生回发

您的问题并不清楚您是手动刷新页面还是通过按钮单击或其他事件发回服务器。

由于您手动刷新页面,IsPostBack 将始终为 false。

在 ASP.NET 中有两种类型的请求(在某种意义上):

  • 常规请求(例如,用户第一次加载页面)
  • 回发(例如,在页面上单击了一个按钮,将数据发送到服务器)

如果您想跟踪用户在这两种情况下是否曾访问过某个页面,则需要自行跟踪。您可以在 Session 中设置一个变量来执行此操作:

Session["UserHasVisitedThisPageBefore"] = true;

然后你可以检查它来代替你当前的IsPostBack检查:

if(Session["UserHasVisitedThisPageBefore"] != null && (bool)Session["UserHasVisitedThisPageBefore"])
{
    // stuff here
}

【讨论】:

  • 感谢您的回答。但是使用会话状态变量不是一个好的选择,因为每当用户离开页面时我都必须将其删除,否则,如果用户转到其他页面并返回,它仍然是错误的。我认为使用隐藏字段是处理此问题的最佳选择。
【解决方案2】:

刷新页面时,IsPostBack 应该为 false。当控件引起回发时,如服务器端按钮,则为真。

编辑 - 回答您的更新: 您可以使用IsPostBack 来确定是否要更新数据库。如果为假,请不要更新数据库,否则更新它。

 if(IsPostBack)
 {
   //Update DB
 }

【讨论】:

  • 感谢您的回答。但我的问题是当用户刷新页面时,IsPostbBack 总是错误的。凯尔的回答建议我应该使用会话变量。虽然 +1。
【解决方案3】:

听起来您需要一些其他机制来检测页面是否已刷新,例如计数器。 Viewstate, Session, hidden field - 有很多选项。

【讨论】:

    【解决方案4】:

    每次刷新页面时,您基本上都会对页面执行 GET 请求。 GET 意味着,加载页面而不改变状态服务器。 IsPostBack = false 是绝对正确的行为!

    如果您对它进行 POST,则回发将发生在页面上。然后正在提交服务器端表单或触发带有autoPostBack 的Web 控件-这将导致回发。 IsPostBack 会是真的。

    【讨论】:

      【解决方案5】:

      在一个使用 XSL 呈现标记的特定项目中,我遇到了 IsPostBack 总是错误的问题。因此,我没有依赖 .NET 的 IsPostBack 属性,而是简单地检查了 Request.HttpMethod。

      例如如果我需要检查 !IsPostBack,我改为检查 Request.HttpMethod == "GET"

      例如如果我需要检查 IsPostBack,我改为检查 Request.HttpMethod == "POST"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-07-20
        • 2021-11-05
        • 2018-11-05
        • 2019-05-06
        • 2017-04-29
        • 2013-04-30
        相关资源
        最近更新 更多