如果从 ajax 调用和 Web 服务 (asmx) 方法不是静态的,为什么代码隐藏方法应该是静态的



我遇到过必须从客户端使用 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/

最新更新