3

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

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

快把我逼疯了!

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

4

5 回答 5

11

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

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

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

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

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

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

Session["UserHasVisitedThisPageBefore"] = true;

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

if(Session["UserHasVisitedThisPageBefore"] != null && (bool)Session["UserHasVisitedThisPageBefore"])
{
    // stuff here
}
于 2011-07-07T16:48:37.380 回答
5

当您刷新页面时,IsPostBack应该为 false。当控件引起回发时,例如服务器端按钮,它就变为 true。

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

 if(IsPostBack)
 {
   //Update DB
 }
于 2011-07-07T16:47:05.833 回答
2

听起来您需要一些其他机制来检测页面是否已刷新,例如计数器。Viewstate、Session、隐藏字段——有很多选项。

于 2011-07-07T16:56:57.060 回答
1

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

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

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

于 2013-07-12T20:51:26.980 回答
1

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

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

于 2011-07-07T16:50:44.763 回答