我在维护 ASP.NET AJAX 页面中的状态时遇到问题。简短版本:在进行异步回调后,我需要一些方法来更新页面 ViewState,以反映服务器在异步调用期间所做的任何状态更改。
这似乎是一个常见问题,但我将描述我的场景以帮助解释:
我有一个类似网格的控件,它具有一些 JavaScript 增强功能——即拖放列和行的能力。当一列或一行被放到一个新位置时,调用一个 AJAX 方法来通知控制服务器端并触发相应的服务器端事件(“OnColumnMoved”或“OnRowMoved”)。
默认情况下,ASP.NET AJAX 调用将整个页面作为请求发送。这样页面会经历一个完整的生命周期,视图状态会被持久化,并且控件的状态会在调用 RaiseCallbackEvent 方法之前恢复。
但是,由于 AJAX 调用不会更新页面,因此 ViewState 会反映控件的原始状态,即使在移动列或行之后也是如此。因此,第二次发生客户端操作时,AJAX 请求会发送到服务器,并且页面和控件会重新构建以反映控件的第一个状态,而不是移动第一列或第一行之后的状态。
这个问题延伸到许多方面。例如,如果我们有一个客户端/AJAX 操作来向网格添加一个新项目,然后拖动一行,则网格是在服务器端构建的,比客户端少一个项目。
最后,对于我的具体示例,最重要的是,我们正在操作的实际数据源对象存储在页面 ViewState 中。这是一个设计决定,允许保留被操纵数据的有状态副本,这些副本可以在多次操作后提交给 DB,或者在用户退出时丢弃。这是很难改变的。
因此,再次,我需要一种方法来在触发 AJAX 方法后在回调时更新页面 ViewState。