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