博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
可能是最漂亮的非静态Page Method解决方案
阅读量:5769 次
发布时间:2019-06-18

本文共 1676 字,大约阅读时间需要 5 分钟。

 不过从“技术”方面来考虑,这两个做法都不如现在这种来得漂亮。我尝试着实现了一个HttpModule,只要使用了它就能轻松使用原来的“非静态 Page Method”了,这几乎完全解决了ASP.NET AJAX中无法使用非静态Page Method的问题,CTP时期程序的移植也变得再容易不过。
 
使用方式:
  下面我将简单介绍一下这个HttpModule的使用方法。我提供了一个程序集NonstaticPageMethod.dll,它提供了一个PageMethodModule,我们首先需要将其添加到web.config中去:
添加PageMethodModule
...
 
  然后建立一个页面Default.aspx,放置一个ScriptManager、两个文本框以及一个触发方法用的超级链接:
Default.aspx
Click Here
 
  然后就是在Code Behind里实现实例的Page Method了,由于我复用了ASP.NET AJAX中客户端访问Web Service方法的部分内部类,因此我们只要把它当作普通Web Service来标记Custom Attribute就可以了:
Default.aspx.cs
[ScriptService] public partial class _Default : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
} [ScriptMethod] [WebMethod] public string ConcateText(string split) {
return this.TextBox1.Text + split + this.TextBox2.Text; } }
 
  剩下的就是在客户端实现访问Page Method类似的JavaScript了,只需通过NonstaticPageMethod来访问方法即可(方法签名: NonstaticPageMethods.MethodName(arg1, arg2, ..., argN, onSuccess, onFailure, userContext)):
JavaScript代码
function onClick() {
NonstaticPageMethods.ConcateText('|', onSuccess); } function onSuccess(result) {
alert(result); }
 
  使用方法就是这么简单,几乎和CTP时完全相同。由于实现中复用了ASP.NET AJAX程序集的部分代码,因此也能够支持复杂的参数类型。
 
使用效果:
  打开页面,在文本框内输入字符,点击超级链接,可以看到结果: 


已知问题:
  目前的NonstaticPageMethod.PageMethodModule实现得还不完美,目前来说至少还有以下问题:
  1. 没有为客户端Proxy脚本(可以通过“Default.aspx/js”查看)添加缓存的支持。
  2. 目前的脚本没有区分Debug和Release模式。
  3. 目前没有生成客户端“类型代理”的支持,即现在无法在客户端使用new CustomType()的方式生成对象,不过它不影响方法对于复杂数据类型的支持。
 
程序集与示例下载:
   可以下载NonstaticPageMethod.dll以及示例代码。
  源代码和实现方式和原理,我会在将其完善之后再进行公开。不过请注意,这个实现只是为了学习和研究之用,除非万不得已,请不要使用它,非静态的Page Method有其天生的劣势,请尽量使用《 》中的第一种做法。:)
本文转自 jeffz 51CTO博客,原文链接:http://blog.51cto.com/jeffz/60308,如需转载请自行联系原作者
你可能感兴趣的文章
Git原理与高级使用(3)
查看>>
从JDK源码看Writer
查看>>
Express 结合 Webpack 实现HMRwi
查看>>
基于protobuf的RPC实现
查看>>
我的友情链接
查看>>
HAProxy负载均衡原理及企业级实例部署haproxy集群
查看>>
开源中国动弹客户端实践(三)
查看>>
Win 8创造颠覆性体验:预览版关键更新
查看>>
AC旁挂三层交换机管理ap,二层接入ap心得
查看>>
JS中比较数字大小
查看>>
jQuery插件的开发
查看>>
基础,基础,还是基础之JAVA基础
查看>>
如何成为一个C++高级程序员
查看>>
ant android 打包签名和渠道
查看>>
我的友情链接
查看>>
显式锁(第十三章)
查看>>
看linux书籍做的一些重要笔记(2011.07.03更新)
查看>>
CString、Char* ,char [20]、wchar_t、unsigned short转化
查看>>
从案例学RxAndroid开发(上)
查看>>
Redis学习手册(内存优化)
查看>>