介紹幾種.NET中ajax非同步呼叫的不同實現方式
(1).aspx 普通web表單頁。
刪除aspx頁面中 html代碼,只保留第一行。在後置字碼頁 .aspx.cs 中寫對應的方法代碼。
前台調用:
// 非同步呼叫頁面url,參數組,返回執行事件
$.post("AjaxPage.aspx" , { type:'getData01' },function(re){
$('#re_method01').html(re);
});
(2)單獨.aspx 頁(建立的時候不勾選 “將代碼放在單獨的檔案中”) + 任意.cs檔案(需要繼承System.Web.UI.Page)
.aspx檔案中代碼 <%@ Page Inherits="命名空間.類" %>
(3).ashx頁面
這裡主要知識點就是繼承了IHttpHandler介面。來實現Http web相關的事件處理。
實現方法:建立後登出掉context.Response.Write("Hello World");改為你的事件處理代碼即可。
1,2,3的前台ajax調用方法都一樣。如果需要區分不同的ajax調用。我們可以傳遞一個不同值的 type 參數。後台再通過switch執行各自的處理常式。
(4)利用System.Web.Services.WebMethodAttribute。
在(1)的基礎上引用命名空間using System.Web.Services;然後在需要非同步執行的方法上添加[WebMethod]屬性。
[WebMethod]
public static string HandleEvent01(string para,string para2)
{
//code...
return "YOUR DATA";
}
前台調用代碼:
$.ajax({
type: "POST",
contentType: "application/json",
url: "AjaxWebService.aspx/HandleEvent01", //調用WebService的地址和方法名稱組合 ---- WsURL/方法名
data: "{'para':'bill','para2':'28'}", //這裡是要傳遞的參數,注意參數名跟後台方法參數名的對應
dataType: 'json', //WebService 返回Json類型 或者 Json/string
success: function(re) {
$('#re_method04').html(re.d);
}
});
可返回json或者string.返回的資料格式為 {"d":你的資料}。這也是為什麼我們前台取值的時候會是re.d。
通常我們返回的資料類型可以為,一般字元串,自訂對象,泛型列表,我們看看返回不同類型資料時前端json資料的格式。
後台代碼:
[WebMethod]
public static string HandleEvent01()
{
//code...
return "some words";
}
[WebMethod]
public static Person AjaxMethodThree(string para)
{
return new Person { Name = "bill", Country = "China", Favor = new string[] { "Box", "Music", "Football" } };
}
[WebMethod]
public static List<Person> AjaxMethodTwo(string para)
{
List<Person> personlist = new List<Person>();
personlist.Add(new Person { Name = "bill", Country = "China", Favor = new string[] { "Box1", "Film1", "Football1" } });
personlist.Add(new Person { Name = "tom", Country = "USA", Favor = new string[] { "Box2", "Music2", "Football2" } });
personlist.Add(new Person { Name = "lucy", Country = "Korea", Favor = new string[] { "Box3", "Music3", "Football3" } });
return personlist;
}
//定義一個Person對象
public class Person
{
public string Name { get; set; }
public string Country { get; set; }
public string[] Favor { get; set; }
}
1.返回字串
json:{"d":"字串"}
2.傳回型別為自訂對象, 前端傳回值為一個對應的JSON對象
json:{"d":{"name1":"value1","name2":"value2"...}}
3,傳回型別為泛型列表, 前端傳回值為對應的JSON對象數組。
如果我們非同步就是需要返回json格式資料,這樣就很方便。同時,除了以WebService的方式被調用,這個頁面也可以以普通URL的方式來非同步訪問,也就是(1)的情況。
(5)調用WebService
添加web 服務。會產生一個WebServicexxx.asmx以及WebServicexxx.cs.非同步程式在WebServicexxx.cs中實現,基本跟(4)差不多。
(6)MVC中的ajax非同步實現
1.直接在控制器中寫public string Ajax(){return "re";}方法,不用額外建視圖檔案。
2.或者你要返回的內容結構還比較複雜,建立一個_Ajax.cshtml分部視圖。控制器中代碼:
public ActionResult Ajax()
{
//...your code...
return PartialView("_Ajax");
}
前台調用代碼:
$.post("/控制器名/ajax" , { type:'getData01' },function(re){
$('#re_method01').html(re);
});
上面的代碼整理到了一個項目裡 代碼下載