文章来源:http://chungle.iteye.com/blog/406054

说到轻量级的客户端通信,我注意到大多数人喜欢使用 ASP.NET AJAX Page
Method 多于 ASMX Web 服务。事实上,在我的文章《使用 jQuery 调用 ASMX Web 服务》的第一条评论中就提到了
Page Method。

鉴于它们流行度,我觉得我应该注意到这个需求。作为对评论中 Justin 问题的回答,我找到了使用 jQuery 调用 Page Method 的方法。事实上,你可以完全不使用 ScriptManager 来达到这个目的。

在这篇文章中,我将说明什么在使用 Page Method 时什么是必要的以及什么是不必要的。然后我将展示在不使用 ScriptManager 时通过 jQuery 来调用 Page Method。

创建一个用于测试上的的页面

写一个 Page Method 是很简单的。 Page Method 必须声明为静态方法,并且它们必须使用[WebMethod] 特性标注。除此之外,AJAX.NET AJAX 处理了其余在服务器需要做的工作。

下面是我们用于示例的 Page Method:

public partial class _Default : Page
{
[WebMethod]
public static string GetDate()
{
return DateTime.Now.ToString();
}
}

那 ScriptManager 和 EnablePageMethods 呢?

传统方法中,要使用 Page Method 的第一步就是设置 ScriptManager 的 EnablePageMethods 属性为 true。

幸运的是,这个属性名有一定程度上的用词不当。它并不会使 Page Method 可用,而仅仅是简单为页面代码中合适的方法生成了内嵌的 JavaScript 代理。

例如,如果在上面的示例对应的页面 Default.aspx 添加了一个 ScriptManager 并且设置了它的 EnablePageMethods 属性为 true,下面的 JavaScript 代码就会嵌入到页面中:

var PageMethods = function() {
PageMethods.initializeBase(this);
this._timeout = 0;
this._userContext = null;
this._succeeded = null;
this._failed = null;
} PageMethods.prototype = {
_get_path:function() {
var p = this.get_path();
if (p) return p;
else return PageMethods._staticInstance.get_path();},
GetDate:function(succeededCallback, failedCallback, userContext) {
return this._invoke(this._get_path(), 'GetDate',false,{},
succeededCallback,failedCallback,userContext); }}
PageMethods.registerClass('PageMethods',Sys.Net.WebServiceProxy);
PageMethods._staticInstance = new PageMethods(); // Generic initialization code omitted for brevity. PageMethods.set_path("/jQuery-Page-Method/Default.aspx");
PageMethods.GetDate = function(onSuccess,onFailed,userContext) {
PageMethods._staticInstance.GetDate(onSuccess,onFailed,userContext);
}

如果你不懂这段代码也没有关系,你不需要知道它是怎么工作的。你只需要知道这个 JavaScript 代理可以让你使用 PageMethods.MethodName 这样的语法来调用 Page Method。

这点重要的一点就是 PageMethods 代理对象归根结底就是一个规则 ASP.NET 服务调用的封装。

使用 jQuery 调用 Page Method

要知道调用 Page Method 与调用一个 Web 服务是一样的,使用 jQuery 调用 Page Method 并不难。要了解更详细的信息,可以参考我之前的文章《让
jQuery 使用 ASP.NET AJAX 的 JSON 序列化的 Web 服务》
 。

使用 jQuery 调用 Page Method,下面就是你所有需要做的:

$.ajax({
type: "POST",
url: "PageName.aspx/MethodName",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
// Do something interesting here.
}
});

综合示例

对应上面示例 Page Method 对应的 Default.aspx 如下:

<html>
<head>
<title>Calling a page method with jQuery</title>
<script type="text/javascript" src="jquery-1.2.6.min.js"></script>
<script type="text/javascript" src="Default.js"></script>
</head>
<body>
<div id="Result">Click here for the time.</div>
</body>
</html>

正如你所看到的,这里没有 ScriptManager,更没有 EnablePageMethods。

下面是 Default.aspx 所引用的 Default.js:

$(document).ready(function() {
// 添加 Page Method 调用的函数作为 div 的 onclick 事件
  $("#Result").click(function() {
$.ajax({
type: "POST",
url: "Default.aspx/GetDate",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
// 使用 Page Method 的返回值来替代 div 的内容
$("#Result").text(msg.d);
}
});
});
});

最后的结果就是当我们的 div 被点击之后,jQuery 发送一个 AJAX 请求到
GetDate Page Method 然后使用返回值替换 div 的内容。

结语

Page Method 比一开始看起来更易于使用。EnablePageMethods 的相对不重要是一个惊喜。

为了避免使演示这个机制复杂,示例仅演示了最简单的目的。如果你想看一下实际运用的例子,可以看看 Moses 使用这个技术
GridView 中实现记录详情展开
的功能。

如果你已经准备要将 ScriptManager 用于其他目的,使用 JavaScript 代理调用 Page Method 也没有坏处。无论如何,如果不准备使用 ScriptManager 或才已经在你的页面中包含了 jQuery,我想这是更高效使用 jQuery 的方法。

使用 jQuery 调用 ASP.NET AJAX Page Method的更多相关文章

  1. jQuery调用Asp.Net后台方法

    常用的ajax就不讲了,这里主要是说通过ajax调用asp.net后台的cs文件暴露的方法. 前台: <%@ Page Language="C#" AutoEventWire ...

  2. 使用jQuery调用ASP.NET WebService的简易教程

    鉴于使用Javascript调用Web Service配置略麻烦,所以记录一下. 1. 新建一个Web服务(WebService.asmx) 2. 取消注释// [System.Web.Script. ...

  3. jquery调用asp.net 页面后台的实现代码

    先创建一个aspx页面编写一个客户端控件<input type="button" id="AjaxDemo" value="AjaxDemo&q ...

  4. jquery 调用asp.net后台代码

    1.需要引用对应的命名空间 System.Web.Services 2.后台方法: 必须是static 约束   必须添加[WebMethod()] 属性 示例: <script type=&q ...

  5. asp.net ajax客户端框架如何调用Page Method

    asp.net ajax客户端框架如何调用Page Method 1:欲调用的页面方法必须声明为公有(Public)2:该方法必须为静态方法(static)3:该方法必须添加[System.Web.S ...

  6. jQuery.ajax()调用asp.net后台方法

    利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法.介意方法名不要重名 建一个WebFormAjax名aspx文件 CS <%@ Page Language=" ...

  7. jQuery Ajax 方法调用 Asp.Net WebService 以及调用aspx.cs中方法的详细例子

    一.jQuery Ajax 方法调用 Asp.Net WebService (引自Terry Feng) Html文件 <!DOCTYPE html PUBLIC "-//W3C//D ...

  8. JQuery ajax调用asp.net的webMethod

    本文章转载:http://www.cnblogs.com/zengxiangzhan/archive/2011/01/16/1936938.html 在vs2010中,用JQuery ajax调用as ...

  9. jQuery Ajax方法调用 Asp.Net WebService、WebMethod 的详细实例代码

    将以下html存为ws.aspx <%@ Page Language="C#" AutoEventWireup="true" %> <scri ...

随机推荐

  1. Android 解压zip文件你知道多少?

    对于Android常用的压缩格式ZIP,你了解多少? Android的有两种解压ZIP的方法,你知道吗? ZipFile和ZipInputStream的解压效率,你对比过吗? 带着以上问题,现在就开始 ...

  2. iOS10使用SecKeyCreateWithData读取公钥私钥

    在使用openssl命令生成RSA公钥私钥以后,当后端人员把密钥的字符串发给你: 首先要问清公钥私钥的密钥格式(PKCS1,PKCS8),密钥位数(1024,2048),然后在iOS10以后,使用苹果 ...

  3. Docker配置参考

    Docker配置参考 一.参数列表 参考网址:https://docs.docker.com/engine/reference/commandline/dockerd/#options Usage: ...

  4. [转]numpy 100道练习题

    100 numpy exercise 翻译:YingJoy 网址: https://www.yingjoy.cn/ 来源:https://github.com/rougier/numpy-100 Nu ...

  5. Dropping TSO features since no CSUM feature

    今天在虚拟机中练习docker的时候突然linux系统反复重启,一下子没有发现原因,不断打开虚拟机还是自动会关机,一下子很纳闷. 打开计算机里,一看原来虚拟机所在磁盘空间满了.怪不得 出现这个问题,清 ...

  6. Linux驱动面试题

    1. Linux设备中字符设备与块设备有什么主要的区别?请分别列举一些实际的设备说出它们是属于哪一类设备. 字符设备:字符设备是个能够像字节流(类似文件)一样被访问的设备,由字符设备驱动程序来实现这种 ...

  7. windows下查看特定端口被什么程序占用

    我电脑上因为命令: netstat -ano 列出的太多了,所以不好看. 以下是其他方式: 查看8088端口占用情况: 开始---->运行---->cmd,或者是window+R组合键,调 ...

  8. asp.net中 使用参数化mysqlparameter 保存数据时,总保存成一个汉字的解决方案。

    var param = new MySqlParameter("@" + columName, property.Value); param.DbType = DbType.Str ...

  9. Fluent动网格【11】:弹簧光顺

    动网格除了前面讲了很多的关于运动指定之外,另一个重要主题则为网格的更新. 在部件运动之后,不可避免的会造成网格形状的变化,如若不对网格加以控制,在持续运动的过程中,则可能造成网格极度变形.歪曲率过大, ...

  10. 【转载】Hadoop 2.7.3 和Hbase 1.2.4安装教程

    转载地址:http://blog.csdn.net/napoay/article/details/54136398 目录(?)[+]   一.机器环境 系统:MAC OS Hadoop:2.7.3 H ...