我有一个简单的页面,在初始加载时,数据绑定到GridView。此gridview启用了排序和分页,并且还包含UpdatePanel。
当用户执行以下操作时,我收到此错误:
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.
任何人都知道会导致什么?单击同一页面似乎只是一个问题。如果在回访时点击了不同的页面,那很好。如果列已排序,然后在回访时再次排序,那也没关系。我不确定两次点击该页面具体是什么导致问题。
以下是寻呼机的代码:
protected void gvResults_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gvResults.DataSource = SearchResults;
gvResults.PageIndex = e.NewPageIndex;
gvResults.DataBind();
}
其中gvResults是GridView,'SearchResults'是存储在viewstate中的List。
修改
看来虽然gridview在用户返回页面时没有显示第5页(返回到第1页),但由于某种原因,浏览器确实保存了viewstate,并且在第5页上有gridview。所以如果我点击第4页并浏览分页事件的代码,我可以看到它认为它所在的页面是5 ...即使显示的内容是第1页。
故事的道德显然是当用户点击后退按钮返回页面时,视图状态会被保存,但显示的表格不是。
答案 0 :(得分:1)
此错误与浏览器中的缓存内容有关。因此,解决方案是禁止在浏览器中缓存此页面:
Response.Cache.SetCacheability(HttpCacheability.NoCache)
Response.Cache.SetExpires(DateTime.Now)
答案 1 :(得分:0)
错误发生了什么 - 用户在单击“后退”按钮后尝试使用的控件不是原始控件,因为它是从缓存加载的。这可以通过您在那里的易失性数据或时间戳来识别 - 我不知道。
你能做的就是把
<%@ Page EnableEventValidation="false" %>
在该页面上,让我们知道这是否有效并且打破了页面上的任何其他内容......
答案 2 :(得分:0)
经过搜索,我找不到合理的答案;但是,我确实发现你可以使用带有asp.net 2.0的3.5预览控件,所以我将History控件添加到页面中,然后让它处理后退按钮问题。
看起来它解决了问题
谢谢!