代码之家  ›  专栏  ›  技术社区  ›  Rex M

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

  •  10
  • Rex M  · 技术社区  · 18 年前

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

    起初的 第一 控件的状态,而不是移动第一列或第一行后的状态。

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

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

    5 回复  |  直到 17 年前
        1
  •  2
  •   Dave Ward    18 年前

    如果您已经在随意移动ViewState,那么您最好使用UpdatePanel。它的部分回发

        2
  •  1
  •   Yaakov Ellis NevilleDNZ    18 年前

    Tweaking the ICallbackEventHandler and Viewstate . 作者似乎在阐述您正经历的情况:

    因此,在使用ICallbackEventHandler时,更新回调状态管理需要克服两个障碍。首先是只读视图状态的问题。另一个是在触发回调之前注册用户对页面所做的更改。

    forum post 这也讨论了同样的问题。

        3
  •  0
  •   Rex M    18 年前

    事实上,我找到了您提供的两个链接,但正如所指出的,它们只是描述问题,而不是解决问题。这篇博文的作者建议通过使用不同的ViewState提供程序来解决问题,但不幸的是,在这种情况下,这是不可能的……我真的需要将ViewState的详细信息放在一边,只需挂接正在进行的操作即可。

        4
  •  0
  •   Tanjim Ahmed Khan    6 年前

    我找到了一个相当优雅的解决方案 Telerik's RadAjaxManager . 它工作得很好。实际上,您注册了可能调用回发的每个控件,然后注册了异步执行回发后应重新绘制的每个控件。这个 RadAjaxManager 将在异步回发后更新DOM并重写 ViewState 以及所有受影响的控件。偷看了一眼之后 Reflector ,引擎盖下面看起来有点乱,但它符合我的目的。

        5
  •  0
  •   Rizwan rhys    4 年前

    我不明白,当内置的ASP.NET AJAX UpdatePanel做同样的事情时,为什么要使用自定义控件。

    它只会增加复杂性,减少支持,让其他人更难使用你的应用程序。