使用ASP.NET AJAX/ICallbackEventHandler跟踪状态

我在ASP.NET AJAX页面中维护状态时遇到问题。简短版本:我需要某种方法在进行异步回调后更新页面视图状态,以反映服务器在异步调用期间所做的任何状态更改

这似乎是一个常见问题,但我将描述我的场景以帮助解释:

我有一个类似网格的控件,它有一些JavaScript增强功能,即拖放列和行的能力。当列或行被放到新位置时,将调用AJAX方法通知控件服务器端并触发相应的服务器端事件(“OnColumnMoved”或“OnRowMoved”)

默认情况下,ASP.NET AJAX调用将整个页面作为请求发送。这样,页面将经历一个完整的生命周期,viewstate将被持久化,控件的状态将在调用RaiseCallbackEvent方法之前恢复

但是,由于AJAX调用不会更新页面,因此ViewState反映控件的原始状态,即使在列或行被移动之后也是如此。因此,第二次发生客户端操作时,AJAX请求将发送到服务器和页面&控件重新构建以反映控件的第一个状态,而不是移动第一列或第一行后的状态

这个问题涉及许多方面。例如,如果我们有一个客户端/AJAX操作将一个新项目添加到网格中,然后拖动一行,那么在服务器端构建网格时,将使用比客户端少一个项目

最后,;对于我的具体示例来说,最严重的是,我们正在处理的实际数据源对象存储在page ViewState中。这是一个设计决策,允许保留被操纵数据的有状态副本,该副本可以在多次操纵后提交给DB,也可以在用户退出时丢弃。这是很难改变的

因此,我再次需要一种方法,在AJAX方法被激发后,在回调时更新页面ViewState

如果您已经在随意移动ViewState,那么您最好使用UpdatePanel。它的部分回发将自动更新页面的视图状态

发表评论