ASP.NET 如果用户单击两次,Datagrid 排序上的视图状态无效

ASP.NET Invalid Viewstate on Datagrid Sort if user clicks twice

我在使用 asp:Datagrid 的旧代码上遇到了问题。此 Datagrid 启用了排序列,如果用户点击得太快,在页面完成排序重新加载之前,将抛出无效的视图状态错误。我尝试禁用控件上的视图状态,然后在每次页面加载时重新绑定它,但无济于事。有人知道我该如何解决这个问题吗?

我还没有测试过,但是您是否尝试过首先在排序事件处理程序中禁用排序,然后在数据绑定之后启用它?

<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) 然后将其重新打开。

所以我最终不得不在单击 link 后禁用 links 客户端。我使用 jquery 抓取 DataGrid 中的所有 link 标签(因为我在那里的唯一标签在 header 中)并给它们所有点击事件,一旦点击,给所有 link 标签另一个阻止点击的点击事件。

惠特:

$(document).ready(function() {
    $("#<%=myDataGrid.ClientID%> a").on("click", function() {
        $("#<%=myDataGrid.ClientID a").on("click", function(e) {
            e.preventDefault();
        });
    });
});

通过这种方式,只有第一次点击会触发,所有其他点击都会被阻止,直到页面从 post 返回刷新。