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

Rex*_*x M 12 asp.net viewstate ajax asp.net-ajax

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

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

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

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

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

这个问题延伸到许多含义.例如,如果我们有一个客户端/ AJAX操作来向网格添加新项目,然后拖动一行,则网格在服务器端构建,其项目少于客户端.

最后,最重要的是,对于我的具体示例,我们正在处理的实际数据源对象存储在ViewState页面中.这是一个设计决策,允许保留被操纵数据的有状态副本,这些数据可以在许多操作后提交给DB,如果用户退出则丢弃.这很难改变.

所以,再次,我需要一种方法,在触发AJAX方法后,在回调时更新页面ViewState.

Dav*_*ard 2

如果您已经在调整 ViewState,那么您不妨使用 UpdatePanel。它的部分回发自动更新页面的 ViewState。