我遇到过一种情况,我必须使用客户端的ajax调用asp页面代码隐藏方法。我发现方法背后的代码应该是静态的,以便使用ajax从客户端调用,其中ASMX Web服务方法是普通的类方法。
为什么代码隐藏方法应该是静态的,为什么ASMX Web服务方法不是? 是否有任何客观理论在幕后或任何其他理论背后运行?
请帮助我!
答案 0 :(得分:1)
您可以在问题right here
上找到答案那么,为什么页面方法调用必须是静态的?
如果您正在实施页面方法,那么您可能很清楚它们的出色表现。与之相比,它们特别具有高性能 UpdatePanel的部分回发。
他们效率很高,主要是因为 它们不要求ViewState进行POST,也不要创建 Page的一个实例,而部分回发同时执行这两个操作 的东西。我们现在知道,页面方法无法创建实例 即使需要,也可以在页面中提供ViewState 请求。
这正是他们必须被标记为静态的原因。
它们无法与您的Page的实例属性和方法进行交互 class,因为页面方法调用不会创建Page或Page的实例 任何控件。页面方法大致相当于速记 对于独立的Web服务。实际上,ScriptManager甚至会调用 它们与普通的Web服务完全一样。
答案 1 :(得分:1)
您通过AJAX调用的方法称为Page methods
,因为它们属于System.Web.UI.Page
类。如果您阅读ASP.NET Page Lifecycle,您将看到Page
类在生命周期中实例化,一旦完成其工作,所有需要重新定时的数据都会被序列化在ViewState中。在回发时,此数据通过隐藏的input
字段发送回服务器,并用于创建Page
类的另一个实例。
Page
类无法从您的代码中实例化,因为您在代码中定义的方法属于Page
类。这就是为什么必须将这些方法定义为static
,因为静态方法不需要其类的实例才能被调用。您几乎可以将它们视为原始Web服务。
ASMX服务等Web服务的方法不必是静态的,因为它们不受此限制的限制。它们可以由它们自己的应用程序中的进程实例化。
答案 2 :(得分:0)
来自:Call server method without refresh page:
您无法从其代码隐藏更改页面。这是因为该方法是静态的。因为它是静态的该方法属于页面的每个实例。如果有多个人打开了该页面,该方法将无法知道要更新的页面。所以你必须将信息发送回ajax电话。
还:http://encosia.com/why-do-aspnet-ajax-page-methods-have-to-be-static/