客户端回调和Ajax页面方法之间的区别-ASP.NET

根据我的理解,两者基本上做相同的事情(让我们从JS执行一个服务器端方法)。有什么不同吗

此外,可以使用JQuery或ScriptManager实现Ajax页面方法。哪一个是首选的,为什么

**赏金:添加赏金以获得问题的清晰解释。谢谢**

基本上,客户端回调和Ajax页面方法都在做同样的事情。他们使用XMLHttpRequest对象向某个URL发送请求(通常是异步的),获取该请求的结果,然后执行您提供的回调方法(callback,小写c),将请求的结果传递给您的方法

尽管如此,这两种方法有一个很大的区别:

  • 页面方法在页面上作为静态方法实现。您的page类只是这些方法的一个方便容器,它们实际上可以托管在任何地方(web服务、自定义的HttpHandler,等等)。由于不会构造任何实例,因此客户端不必发送ViewState数据,Asp.Net也不必在页面的生命周期中运行。另一方面,您无权访问页面类的实例方法和属性。然而,在许多情况下,您可以通过将实例方法重构为静态方法来解决这个问题。(有关更多信息,请参阅本文。)

  • 客户端回调在页面上作为实例方法实现。
    他们可以访问页面上的其他实例方法,包括存储在ViewState中的内容。这很方便,但需要付出代价:为了构建页面实例,客户机必须向服务器发送相对大量的数据,并且必须在页面生命周期的相当长的一段时间内运行。(本文有一个很好的图表,显示了哪些部分。)

除此之外,设置它们的成本差别很大,客户使用它们的方式也不同:

  • 客户端回调需要相当数量的特殊支架
    与Asp.Net紧密耦合的代码(如上面的链接所示)。鉴于
    我们现在有了更简单的替代方案,我很想说这项技术已经过时(用于新的开发)

  • 使用
    ScriptManager比客户端回调需要更少的设置:您只需要
    脚本管理器弹出到
    页面,设置启用页面方法=true
    然后通过代理PageMethods代理访问页面方法

  • 使用jQuery调用页面方法只需要链接jQuery库(当然还需要熟悉jQuery)

我更喜欢使用jQuery来访问页面方法,因为它独立于服务器框架,并公开了适量的实现细节,但这实际上只是一个品味问题。如果你使用“代码> Script管理器”,它的代理使得页面方法在眼睛上看起来更容易一些,一些人可能会认为更重要。

发表评论