【问题标题】:ASP.NET Invalid Viewstate on Datagrid Sort if user clicks twice如果用户单击两次,则数据网格排序上的 ASP.NET 无效视图状态
【发布时间】:2018-03-20 16:17:35
【问题描述】:

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

【问题讨论】:

  • 带有 CSS 的加载叠加层?
  • 我喜欢这个想法并想使用它,但由于我们在解决方案中的其他地方没有类似的东西,因此 PM 并没有得到很好的解决

标签: c# asp.net datagrid viewstate


【解决方案1】:

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

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

【讨论】:

  • 我的问题是,这并没有在他们到达回发之前阻止事情,然后已经太晚了。我最终不得不调整客户端。我将在下面发布我的解决方案。
【解决方案2】:

因此,一旦单击链接,我最终不得不禁用链接客户端。我使用 jquery 来获取 DataGrid 中的所有链接标签(因为我在其中的唯一标签在标题中),并为它们提供了一个点击事件,一旦点击,所有链接标签都会再次点击阻止点击的事件。

对白:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    相关资源
    最近更新 更多