我遇到了一个奇怪的问题。每次刷新页面时,IsPostBack
都是假的
为了确保我的内容或母版页中没有任何内容导致这种情况,我创建了一个空的Web表单并在调试模式下将其启动。仍然,在回发中,我将IsPostBack
设置为false。
我在web.config中有enableSessionState="true"
和<sessionState timeout="30" />
。
这让我疯了!
更新:我按F5刷新页面。根据答案,这不应该导致回发。我想知道什么时候使用刷新页面(甚至手动)并防止对db进行一些修改 有解决方案吗?
答案 0 :(得分:11)
刷新页面(按 F5 或浏览器中的刷新按钮)不是回发。单击按钮,更改下拉列表或页面上导致数据发送到服务器的其他事件(通过HTTP POST,因此名称为'postback')时发生回发
您的问题并不清楚您是手动刷新页面还是通过单击按钮或其他事件回发到服务器。
由于您手动刷新页面,IsPostBack
将始终为false。
ASP.NET中有两种类型的请求(在某种意义上):
如果您想跟踪用户之前是否曾访问某个网页,则您需要跟踪自己。您可以在Session中设置变量来执行此操作:
Session["UserHasVisitedThisPageBefore"] = true;
然后您可以检查它以代替当前的IsPostBack
支票:
if(Session["UserHasVisitedThisPageBefore"] != null && (bool)Session["UserHasVisitedThisPageBefore"])
{
// stuff here
}
答案 1 :(得分:5)
刷新页面时,IsPostBack
应为false。当控件引发回发时,例如服务器端按钮,它就成了现实。
编辑 - 要回答您的更新:
您可以使用IsPostBack
来确定是否要更新数据库。如果它是错误的,请不要更新数据库,否则更新它。
if(IsPostBack)
{
//Update DB
}
答案 2 :(得分:2)
听起来您需要一些其他机制来检测页面是否已刷新,就像计数器一样。 Viewstate,Session,hidden field - 有很多选项。
答案 3 :(得分:1)
每次刷新页面时,您基本上都会向您的页面执行GET请求。 GET意味着,加载页面而不更改状态服务器。 IsPostBack
= false是绝对正确的行为!
如果你对它进行POST,则会在页面上发生回发。然后提交服务器端表单或触发autoPostBack
的Web控件 - 它将导致回发。 IsPostBack
将是真的。
答案 4 :(得分:0)
我在使用XSL呈现标记的特定项目中始终将IsPostBack问题视为假。因此,我只是检查了Request.HttpMethod,而不是依赖.NET的IsPostBack属性。
e.g。如果我需要检查!IsPostBack,我改为检查Request.HttpMethod ==“GET”
e.g。如果我需要检查IsPostBack,我会检查Request.HttpMethod ==“POST”