【轉】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

相關文章
相關標籤/搜索