使用 jQuery 调用 ASP.NET AJAX Page Method
文章来源: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的更多相关文章
- jQuery调用Asp.Net后台方法
常用的ajax就不讲了,这里主要是说通过ajax调用asp.net后台的cs文件暴露的方法. 前台: <%@ Page Language="C#" AutoEventWire ...
- 使用jQuery调用ASP.NET WebService的简易教程
鉴于使用Javascript调用Web Service配置略麻烦,所以记录一下. 1. 新建一个Web服务(WebService.asmx) 2. 取消注释// [System.Web.Script. ...
- jquery调用asp.net 页面后台的实现代码
先创建一个aspx页面编写一个客户端控件<input type="button" id="AjaxDemo" value="AjaxDemo&q ...
- jquery 调用asp.net后台代码
1.需要引用对应的命名空间 System.Web.Services 2.后台方法: 必须是static 约束 必须添加[WebMethod()] 属性 示例: <script type=&q ...
- asp.net ajax客户端框架如何调用Page Method
asp.net ajax客户端框架如何调用Page Method 1:欲调用的页面方法必须声明为公有(Public)2:该方法必须为静态方法(static)3:该方法必须添加[System.Web.S ...
- jQuery.ajax()调用asp.net后台方法
利用JQuery的$.ajax()可以很方便的调用asp.net的后台方法.介意方法名不要重名 建一个WebFormAjax名aspx文件 CS <%@ Page Language=" ...
- jQuery Ajax 方法调用 Asp.Net WebService 以及调用aspx.cs中方法的详细例子
一.jQuery Ajax 方法调用 Asp.Net WebService (引自Terry Feng) Html文件 <!DOCTYPE html PUBLIC "-//W3C//D ...
- JQuery ajax调用asp.net的webMethod
本文章转载:http://www.cnblogs.com/zengxiangzhan/archive/2011/01/16/1936938.html 在vs2010中,用JQuery ajax调用as ...
- jQuery Ajax方法调用 Asp.Net WebService、WebMethod 的详细实例代码
将以下html存为ws.aspx <%@ Page Language="C#" AutoEventWireup="true" %> <scri ...
随机推荐
- PHP异步扩展Swoole笔记(2)
dispatch_mode, 数据包分发策略 可以选择7种类型,默认为21,轮循模式,收到会轮循分配给每一个Worker进程2,固定模式,根据连接的文件描述符分配Worker.这样可以保证同一个连接发 ...
- ssh的用户配置文件config管理ssh会话
抄的这个: https://www.cnblogs.com/zhonghuasong/p/7236989.html 只是在这里留个存档,防止删除 我有这样的需求就是,因为需要ssh连接到服务器,然后每 ...
- [转]linux用户管理
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对使用系统的用户进行 ...
- DES算法原理完整版
1.所需参数 key:8个字节共64位的工作密钥 data:8个字节共64位的需要被加密或被解密的数据 mode:DES工作方式,加密或者解密 2.初始置换 DES算法使用64位的密钥key将64位的 ...
- logstash之filter处理中括号包围的内容
如题,logstash之filter处理中括号包围的内容: $grep -v "#" config/logstash-nlp.yml input { kafka { bootstr ...
- MobaXterm v10.9破解
去官网下载个人版 Exeinfo查壳发现无壳 载入OD,右键,字符串智能搜索. Ctrl+F搜索关键词About,找到到FormAbout处,即关于窗体的创建和显示的位置.双击查看汇编代码 程序在窗体 ...
- 在生成一个窗体的时候,点击窗体的右上角关闭按钮激发窗体事件的方法:窗体Frame为事件源,WindowsListener接口调用Windowsclosing()。
事件模式的实现步骤: 开发事件对象(事件发送者)——接口——接口实现类——设置监听对象 一定要理解透彻Gril.java程序. 重点:学会处理对一个事件源有多个事件的监听器(在发送消息时监听器收到 ...
- Ubuntu 16.04 ROS环境配置
最近新入职一家公司,是搞智能无人驾驶的,用的操作系统是Ubuntu和ros,之前没接触过ros系统,既然公司用那就必须的学习啊,话不多说先装它一个ros玩玩... 1. Ubuntu 安装 ROS K ...
- JavaScript学习历程01
水仙花数 ps:各位数字立方和等于该数本身 方法1 (数组) <script type="text/javascript"> var i = 100; var newi ...
- ML 激励函数 Activation Function (整理)
本文为内容整理,原文请看url链接,感谢几位博主知识来源 一.什么是激励函数 激励函数一般用于神经网络的层与层之间,上一层的输出通过激励函数的转换之后输入到下一层中.神经网络模型是非线性的,如果没有使 ...