【转】Asp.net开发中甩掉.ashx .asmx

 

 

通常,asp.net中,提供ajax请求响应的处理,须要借助于通常处理程序(*.ashx)或web服务(*.asmx),而且每个ajax请求,都要建一个这样的文件,如此一来,若是在一个项目中ajax程序多了,势必会产生一堆的.ashx或.asmx,虽然于程序自己无碍,但那一堆文件看上去总以为有伤大雅。那么可不能够丢掉这些.ashx和.asmx,选择一种更简练的方式来作ajax程序呢。
答案是确定的,那就是:WebMethod -- web service 。html


  首先在 aspx.cs文件里建一个公开的静态方法,而后加上WebMethod属性。
  如:jquery

 1 [WebMethod]  2  public static string GetUserName()  3  {  4  //......
 5  }  6   若是要在这个方法里操做session,那 还得将WebMethod的EnableSession 属性设为true。即:  7 [WebMethod(EnableSession = true)]//或[WebMethod(true)]
 8  public static string GetUserName()  9  { 10  //......
11  }

 

 


 
 而后咱们就写ajax程序来访问这个程序,咱们就用jQuery吧。
1  $.ajax({ 2         type: "POST", 3         contentType: "application/json", 4         url: "WebForm2.aspx/GetUserName", 5         data: "{}", 6         dataType: "json", 7  success: function(){.......} 8     });
  这里对几个参数作一下简单的说 明,
  type:请求的类型,这里必须用post 。WebMethod方法只接受post类型的请求。
  contentType: 发送信息至服务器时内容编码类型。咱们这里必定要用application/json 。
  url:请求的服务器端处理程序的路径,格式为"文 件名(含后缀)/方法名"
  data:参数列表。注意,这里的参数必定要是json格式的字符串,记住是字符串格式,如:" {aa:11,bb:22,cc:33,...}"。若是你写的不是字符串,那jquery会把它实序列化成字符串,那么在服务器端接受到的就不是json格式了,且不能为空,即便没有参数也要写成"{}",如上例。
不少人不成功,缘由就在这里。
  dataType:服务器返回的数据类型。必须是json,其余的都无效。由于 webservice是一json格式返回数据的,其形式为:{"d":"......."}。
  success:请求成功后的回调函数。你 能够在这里对返回的数据作任意处理。

  咱们能够看到其中一些参数值是固定的,因此从复用性的角度考虑,咱们能够给jquery作一个扩展,对上面的函数作一下简单的封装:
咱们建一个脚本文件叫jquery.extend.js。在里面写一个叫ajaxWebService的方法(由于webmethod其实就是WebService嘛,故此方法对请求*.asmx也是有效的),代码以下:
 1 ///    
 2 /// jQuery原型扩展,从新封装Ajax请求WebServeice  3 ///    
 4 ///    
 5 /// 处理请求的地址  6 ///
 7 ///    
 8 /// 参数,json格式的字符串  9 ///
10 ///    
11 /// 请求成功后的回调函数 12 /// 13 $.ajaxWebService = function(url, dataMap, fnSuccess) { 14  $.ajax({ 15         type: "POST", 16         contentType: "application/json", 17  url: url, 18  data: dataMap, 19         dataType: "json", 20  success: fnSuccess 21  }); 22 }

 

 

   好了,这样咱们请求webmethod方法 就能够这样写了:web

 
$.ajaxWebService("WebForm2.aspx/GetUserName", "{}", function(result) {......});

 



 

  最后:若是你的项目中ajax程序很是多(这种状况是可能存在的,我作过一个网站,是个sns,全程ajax,几乎每一个操做都用了ajax),
 你以为把WebMethod方法写在各个aspx页面里很零散,那么你能够专门建一个页面(如:WebMethods.aspx)来存放。ajax

相关文章
相关标签/搜索