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

时间:2018-03-20 16:17:36

标签: c# asp.net datagrid viewstate

我在使用asp:Datagrid的旧代码中遇到问题。此Datagrid启用了排序列,如果用户点击过快,则在页面完成从排序重新加载之前,将引发无效的viewstate错误。我尝试在控件上禁用viewstate,然后在每个页面加载中重新绑定它,但无济于事。有谁知道如何解决这个问题?

2 个答案:

答案 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();
        });
    });
});

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