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

时间:2009-08-25 19:32:56

标签: asp.net jquery ajax

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

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

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

3 个答案:

答案 0 :(得分:22)

从根本上说,Client Callbacks和Ajax Page Methods正在做同样的事情。他们使用XMLHttpRequest对象向某个URL发送请求(通常是异步的),获取该请求的结果,然后执行您提供的回调方法( callback 使用小写< em> c ),将请求的结果传递给您的方法。

话虽如此,这两种方法之间存在一个很大的区别:

  • 页面方法在页面上以静态方法实现。您的页面类只是这些方法的一个方便容器,它们可以真正托管在任何地方(Web服务,自定义HttpHandler等)。由于不会构建任何实例,因此客户端不必发送ViewState数据,并且Asp.Net不必运行Page的生命周期。另一方面,您无权访问Page类的实例方法和属性。但是,在许多情况下,您可以通过将实例方法重构为静态方法来解决此问题。 (有关详细信息,请参阅this article。)

  • 客户端回调在您的网页上实现为实例方法。 他们可以访问您网页上的其他实例方法,包括存储在ViewState中的内容。这很方便,但需要付出代价:为了构建Page实例,客户端必须向服务器发送相对大量的数据,并且必须在页面生命周期的相当一部分中运行。 (This article has a nice diagram显示哪些部分。)

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

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

  • 使用调用页面方法 ScriptManager 需要的设置少于客户端回调:您只需要 将ScriptManager弹出到您的 页面,设置EnablePageMethods = true, 然后通过代理PageMethods代理访问您的页面方法。

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

我更喜欢使用jQuery来访问页面方法,因为它独立于服务器框架并且只暴露了适当数量的实现细节,但这只是一个品味问题。如果你使用ScriptManager,它的代理会使页面方法调用更容易一些,有些人可能会认为更重要。

答案 1 :(得分:4)

我会说存在差异,但会倾向于以你感觉更舒服的方式来做。

我已经使用了这两种方法,并且从页面调用jQuery通常更快。我编写了一个ashx处理程序来完成jquery调用所需的工作(查询数据库,处理某些内容等)并从页面调用它。我不会使用aspx页面进行jQuery调用,因为你发送了很多你根本不需要的信息。使用Ajax.Net调用的不同/好处是您不需要构建另一个页面来处理事物,您可以使用相同的页面事件来执行它。

例如,如果您需要使用第一个选定值填充第二个下拉列表,您可以使用Ajax.Net在后面的页面代码中调用SelectedIndexChanged,当它触发时,转到Page_Load,SelectedIndexChanged,Page_PreRender等等。在事件方法中,您将查询数据库并填充第二个ddl。

使用jQuery可能会有所不同。你调用一个ashx处理程序,处理程序只是一个服务器方法,可以执行魔术并以你想要的形式返回数据(json,字符串数组,xml等),并使用javascript填充第二个ddl。 正如我之前告诉过你的那样,有些人对客户端代码感觉不太舒服,而且往往会在服务器上做到这一点,但我总是说你需要使用正确的工具来做正确的工作,所以要知道你的工具并申请他们明智地。

如果你想了解更多关于ASP.Net,ASHX处理程序和jQuery的信息,你可以阅读我写的关于它的post

希望它有所帮助.-

答案 2 :(得分:0)

它们基本相同。的两个

  1. 为您设置网络服务,控件的javascript可以调用。
  2. 提供异步响应 e,不涉及页面生命周期。
  3. 他们是不同的:

    1. 页面方法只需要用属性装饰静态方法就可以了。其余的魔法由HTTP处理程序和模块处理。 回调要求您自己实现一些接口并处理异步事件处理程序。我发现它们更像是一种痛苦。
    2. 回调仅适用于某些控件。调用页面方法允许您通过自定义javascript影响任何控件。回调在这方面略有优势,因为客户端行为已经被编写和修复。使用页面方法可以提供更大的灵活性(客户端的行为由您决定)。
    3. 还有一些其他差异,但这些是基础知识。我的理解是客户端回调往往与Page方法一样好,但由于它们仅在某些情况下可用,因此不会使用它们,而Page方法始终是一个有效的途径。

      至于 ScriptManager与JQuery的问题,我的感觉就是它的味道比什么都重要。我喜欢JQuery的语法,我觉得它表现得更好,但在宏观方案中,最昂贵的是XmlHttpRequest ...之后,javascript的执行可能在那之后差别不大。