2009-07-10 62 views
2

我有一个简单的页面,在初始加载时,数据绑定到一个GridView。这个gridview已经启用了排序和分页功能,并且被UpdatePanel包围。ASP.Net 2.0:浏览器后退按钮 - 无效的回发或回调参数

当用户执行以下,我收到此错误:

Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation. 
  • 点击传呼机更改为 特定页面(可以说5)
  • 点击一个链接导航到另一页
  • 按下浏览器中的返回按钮以返回到带有GridView的页面
  • 网格现在恢复为原始的网格 TE由于 浏览器(第1页)不跟踪,所以 用户点击进入页面5再次,导致错误

任何人都知道什么会导致此 ?它只在点击同一页面时似乎是个问题。如果在回访时点击了不同的页面,那很好。如果一列被排序,然后在回访中再次排序,那也没有问题。我不确定关于点击两次的具体内容是否会导致问题。

这里的寻呼机代码:

protected void gvResults_PageIndexChanging(object sender, GridViewPageEventArgs e) 
{ 
    gvResults.DataSource = SearchResults; 
    gvResults.PageIndex = e.NewPageIndex; 
    gvResults.DataBind(); 
} 

其中gvResults是在GridView和“SearchResult所”是存储在视图状态列表。

编辑

看来,虽然GridView控件不显示5页,当用户返回到页面(恢复到第1页),由于某种原因,浏览器做保存视图状态,并在第5页有gridview。因此,如果我点击第4页,并通过分页事件的代码,我可以看到它认为它的页面是5 ...即使显示的内容是第1页

故事的道德显然是当用户点击后退按钮返回到页面时,视图状态得到保存,但是显示的表不是。

回答

0

搜索我不能”后真的找到合理的答案;但是,我确实发现可以使用3.5预览控件w/asp.net 2.0,因此我将History控件添加到页面,并让它处理后退按钮问题。

看起来像它解决了问题

谢谢!

0

发生什么事情正是错误所说 - 用户尝试使用的控件在单击后退按钮后不是原始的,因为它是从缓存中加载的。这可以通过您在那里的易变数据或时间戳识别 - 我不知道。

你可以做的就是把

<%@ Page EnableEventValidation="false" %> 

在该网页上,并让我们知道这工作,还判定是否就坏了别的网页上...

+0

这样做会有效;但我宁愿不关闭验证,如果有其他解决方法 – John 2009-07-10 15:47:10

1

此错误与浏览器中的缓存内容有关。因此,解决方案是禁止在浏览器中缓存此页面:

 Response.Cache.SetCacheability(HttpCacheability.NoCache) 
     Response.Cache.SetExpires(DateTime.Now) 
+0

根据该页面上的流量,您可能想要找到另一个解决方案,因为它可能会很快成为一条糟糕的道路来停止缓存事物。 – Peter 2012-12-12 05:04:57