我在使用asp:Datagrid的旧代码中遇到问题。此Datagrid启用了排序列,如果用户点击过快,则在页面完成从排序重新加载之前,将引发无效的viewstate错误。我尝试在控件上禁用viewstate,然后在每个页面加载中重新绑定它,但无济于事。有谁知道如何解决这个问题?
答案 0 :(得分:0)
我还没有对它进行过测试,但您是否尝试在排序事件处理程序中首先禁用排序,然后在数据绑定后启用它?
<asp:DataGrid id="MyDataGrid" OnSortCommand="SortMyData" AllowSorting="True" runat="server">
void SortMyData(Object sender, DataGridSortCommandEventArgs e)
{
MyDataGrid.AllowSorting = false;
DataView myDataView = [however you're retrieving the data];
myDataView.Sort = e.SortExpression;
MyDataGrid.DataSource = myDataView;
MyDataGrid.DataBind();
MyDataGrid.AllowSorting = true;
}
或者(可能更好)在列表完成排序时实现一个事件:How can I be notified if a DataGrid column is sorted (and not sorting)并将其重新打开。
答案 1 :(得分:0)
因此,一旦点击链接,我最终必须禁用链接客户端。我使用jquery来获取DataGrid中的所有链接标签(因为我在那里只有标题中的链接标签),并给了他们所有的点击事件,一旦点击,就会给所有链接标签带来另一个阻止点击的点击事件。
致白:
$(document).ready(function() {
$("#<%=myDataGrid.ClientID%> a").on("click", function() {
$("#<%=myDataGrid.ClientID a").on("click", function(e) {
e.preventDefault();
});
});
});
通过这种方式,只有第一次点击才会触发,所有其他点击都会被阻止,直到页面从帖子后面刷新为止。