根据我的理解,他们两个基本上做同样的事情(让我们从JS执行服务器端方法)。有什么不同吗?
此外,可以使用JQuery或使用ScriptManager实现Ajax页面方法。哪一个是首选,为什么??
** BOUNTY:添加赏金以获得对问题的清晰解释。谢谢**
答案 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)
它们基本相同。的两个强>:
他们是不同的:
还有一些其他差异,但这些是基础知识。我的理解是客户端回调往往与Page方法一样好,但由于它们仅在某些情况下可用,因此不会使用它们,而Page方法始终是一个有效的途径。
至于 ScriptManager与JQuery的问题,我的感觉就是它的味道比什么都重要。我喜欢JQuery的语法,我觉得它表现得更好,但在宏观方案中,最昂贵的是XmlHttpRequest ...之后,javascript的执行可能在那之后差别不大。