引言
在項目中突然看到,aspx中的ajax可以訪問aspx.cs中的方法,覺得很新奇,也許是lz少見多怪,不過,真的有發現新大陸似的那種興奮,你也許知道這代表什么,學會了這種方式,代表你以后,可以建更少的頁面,更少ashx,更少的.....能不興奮嗎?在lz的印象中,ajax一般都和一般處理程序聯系起來的,請求另外的aspx頁面就不說了,而請求自身CodeBehind中的方法真的很少見,這里記錄一下,也許也有跟我一樣不知道的朋友,希望能幫到你。只是知道ajax可以訪問webservice中加webmethod特性的方法,沒想到也可以訪問aspx中加webmethod的方法。幸虧現在知道了。
ajax配置
測試:模擬一個小學二年級的加法運算,通過ajax將值傳給default.aspx.cs中的Add方法,通過該方法完成計算,返回結果。
Default.aspx
ajax的使用方法這里就不多說了。
1 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Wolfy.AjaxSelf.Default" %> 2 3 <!DOCTYPE html> 4 5 <html xmlns="http://www.w3.org/1999/xhtml"> 6 <head runat="server"> 7 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 8 <title></title> 9 <script type="text/javascript" src="jquery-1.10.2.js"></script> 10 <script type="text/javascript"> 11 $(function () { 12 $("#btn").click(function () { 13 var num1 = $("#num1").val(); 14 var num2 = $("#num2").val(); 15 $.ajax({ 16 type: "POST",// 17 url: "Default.aspx/Add", 18 data: "{num1:'"+num1+"',num2:'"+num2+"'}", 19 contentType: "application/json", 20 dataType: "json", 21 success: function (data) { 22 $("#num3").val(data.d); 23 }, 24 error: function (msg) { 25 alert(msg.status); 26 } 27 }); 28 }); 29 }); 30 </script> 31 </head> 32 <body> 33 <form id="form1" runat="server"> 34 <div> 35 <input type="text" id="num1" name="name" value="1" /> 36 <label>+</label> 37 <input type="text" id="num2" name="name" value="1" /> 38 <input type="button" name="name" id="btn" value="=" /> 39 <input type="text" id="num3" name="name" value="1" /> 40 41 </div> 42 </form> 43 </body> 44 </html>
Default.aspx.cs
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Services; 6 using System.Web.UI; 7 using System.Web.UI.WebControls; 8 namespace Wolfy.AjaxSelf 9 { 10 public partial class Default : System.Web.UI.Page 11 { 12 protected void Page_Load(object sender, EventArgs e) 13 { 14 15 } 16 [WebMethod] 17 public static int Add(int num1, int num2) 18 { return num1 + num2; } 19 } 20 }
測試結果
注意
ajax中的type必須為“POST”,否則:
Ajax中的data,中鍵必須與方法中參數名字相同,否則:
codeBehind中的方法必須加WebMethod特性,必須為靜態方法,否則:
這是其中需要注意的地方,至於為什么必須是靜態的,lz也問了很多人,也不是很懂,這里就不班門弄斧了,有知道的朋友,留下你的足跡,也可以相互溝通一下。
總結
這種方式,也是在看項目中,遇到的,真的是第一次見,真的很開心,現在遇到了。遇到了,就拿出來,記錄一下,分享一下,開心一下。
這種方式跟ajax訪問webservice確實很像,但是為什么必須是靜態的呢?也許你知道,請一起討論,讓更多的朋友也知道。