C#实现简易ajax调用后台方法
时间:2012-06-27 14:16来源:未知 作者:admin 点击:次我要投稿 高质量的ASP.NET空间,完美支持1.0/2.0/3.5/4.0/MVC等
在当前WEB当中,有些人都会抛弃asp.net的服务器控件,转而使用ajax来进行数据的交互和存储.
当我们大量使用ajax的时候,对于新手而言,肯定会创建很多的ashx或aspx页面,通过拼接参数,在ashx或aspx中对参数进行解析,
并根据某些特定的参数进行解析来判断当前的请求属于哪种类型的操作,然后手动获取Request.QueryString、Params、Form内的值,来实现功能.大致代码如下:
View Code
名字:<input id=type=/> value=onclick=/> > 5 function search(){ ).val(); $.ajax({ , , name : name }, , 12 success: function(json){ } 15 }); 16 }; 17 </script> ProcessRequest(HttpContext context) 20 { ]; ) 23 { ]; json = ... context.Response.Write(json); 28 } 29 }
在大量的重复这些编写这些代码的情况下,众多的新手们肯定都会跟我一样,蛋疼啊,而且随着业务及模块的不断增加,这些个ashx或aspx,那个量还不是一般的多呢.
而且每个都只是做一些判断,根本没什么重要的业务在里面,于是乎我们就在想,有没有什么方法可以让我们在ajax内传递某些参数,达到直接反射类,访问对应的方法,自动处理参数等.
根据以上的一些要求,的确可以让我们在编码过程当中,减少很多的困惑和麻烦.那我们现在就一步步开始吧.
首先,我们先从ajax开始,传递某些特定的值来反射对应的类,那么我们的第一反应就是将类的整个完整命名传递过去(因为我们并不能保证所有要调用的类都在同一个程序集内).
那么我们就在js内定义2个参数分别为assembly和fullName吧.我们假设Customer业务类的FullName为SysBLL.CustomerBLL且所在的程序集为SysBLL.
那么前面的例子ajax的修改大致如下:
View Code
> 2 function search(){ ).val(); $.ajax({ , , fullName: , method: , name : name }, , 9 success: function(json){ } 12 }); 13 }; 14 </script>
从我们的需求上,我们了解到,我们只需要一个ashx来作为代理,去反射对应的类和方法,并从传递的参数中过滤出方法所需要的参数,最后调用方法取得返回值.代码大致如下:
View Code
1 View Code Common 4 { BLLAshx : IHttpHandler 6 { ProcessRequest(HttpContext context) 8 { ], fullName = context.Request.Params[]; 10 var bllType = Assembly.Load(assemblyName).GetType(fullName); methodName = context.Request.Params[]; 13 var method = bllType.GetMethod(methodName); 14 if (null != method) 15 { 16 string[] parameterValues = GetMethodParameterValues(context.Request, method); instance = Activator.CreateInstance(bllType); result = method.ReturnType == : method.Invoke(instance, parameterValues).ToString(); context.Response.Write(result); 24 } { } 29 } [] GetMethodParameterValues(HttpRequest request, MethodInfo method) 32 { 33 string[] parameterValues = null; 34 var methodParameters = method.GetParameters(); 35 if (0 < methodParameters.Length) 36 { 37 parameterValues = new string[methodParameters.Length]; 38 for (int i = 0; i < methodParameters.Length; i++) 39 { 40 parameterValues[i] = request.Params[methodParameters[i].Name]; 41 } 42 } 43 return parameterValues; 44 } 45 } 46 } SysBLL 49 { CustomerBLL 51 { Search(string name) 53 { json; 56 } 57 } 58 }
对于以上的ashx,我们需要在web项目中,新建一个名为BLLAshx的ashx文件,但是我们不要.cs的文件,并作如下修改:
<%@ WebHandler Language=CodeBehind=Class=%>