我遇到过必须从客户端使用 ajax 调用 asp 页代码隐藏方法的情况。我发现代码隐藏方法应该是静态的,以便使用 ajax 从客户端调用,而 ASMX Web 服务方法是普通的类方法。
为什么代码隐藏方法应该是静态的,为什么 ASMX Web 服务方法不是?是否有任何对象理论在幕后运行或任何其他理论?
请帮帮我!
您可以在此处找到问题的答案
那么,为什么页面方法调用必须是静态的呢?
如果您正在实现页面方法,您可能很清楚它们的出色性能。与更新面板的部分回发。
它们之所以高效,主要是因为它们不需要 POST 视图状态,并且它们不会创建页面的实例,而部分回发同时执行这两项操作事情。正如我们现在所知,页面方法无法创建页面,即使需要,因为视图状态未在请求。
这正是它们必须标记为静态的原因。
它们无法与主页的实例属性和方法交互类,因为页面方法调用不会创建 Page 或它的任何控件。页面方法大致等同于速记对于独立的 Web 服务。事实上,脚本管理器甚至调用它们与常规 Web 服务完全相同。
通过 AJAX 调用的方法称为Page methods
,因为它们属于System.Web.UI.Page
类。 如果您阅读 ASP.NET 页面生命周期,您将看到 Page
类在生命周期中实例化,一旦它完成其工作,需要重新激活的所有数据都将在 ViewState 中序列化。 在回发时,此数据通过隐藏的input
字段发送回服务器,并用于创建 Page
类的另一个实例。
无法从代码后台实例化 Page
类,因为在代码隐藏中定义的方法属于 Page
类。 这就是为什么这些方法必须定义为static
,因为静态方法不需要它们的类的实例就可以被调用。 您几乎可以将它们视为原始的Web服务。
像 ASMX 服务这样的 Web 服务的方法不必是静态的,因为它们不受此限制的限制。 它们可以由其自己的应用程序中的进程实例化。
调用服务器方法而不刷新页面:
不能从其代码隐藏更改页面。 这是因为该方法是静态的。 因为它是静态的,所以该方法属于页面的每个实例。 如果有多个人打开了该页面,则该方法将不知道要更新哪个页面。 因此,您必须将信息发送回 AJAX 调用。
另外: http://encosia.com/why-do-aspnet-ajax-page-methods-have-to-be-static/