导读:
這是目前我的方案,個人覺得還蠻輕巧自在的。 Controller負責把要輸出的資料序列成json。
Html.ActionUrl 這隻method原來的MVC Toolkit沒有,我隨手加的。
我 是用Newtonsoft.Json作物件序列成JSON,那為什麼不用MS Ajax內建的 System.Web.Script.Serialization.JavaScriptSerializer 來做,是因為他將DateTime序列成字串格式,Client 端無法直接取用。Newtonsoft.Json的部份我也是小改一點,讓他可以做Value Type 的序列化,可參考。
附帶一提,我是架在iis 5.1上測試,本來看到 IIS 6.0 和 ASP.NET 3.5 / VS 2008 的相容性測試,己為會很困難的,大概是測MVC Web Project比較單純吧,裝完 .NET Framework 3.5再裝 ASP.NET 3.5 Extensions Preview(是的,目前只是preview版),直接就ok了。
底 下的流程 Controller(AjaxTest) -> View(AjaxPage) -> Controller(Ajax, id=1) -> View(AjaxPage) 取得json ->Controller(Ajax, id=2) -> View(AjaxPage) 取得json -> end ,大概是這樣。(如果畫成圖會比較漂亮吧)
ControllerBase.cs
publicclassControllerBase : Controller {
publicvoidRenderJSON(objectobj) {
stringjsonString = Newtonsoft.Json.JavaScriptConvert.SerializeObject(obj);
Response.Clear();
Response.ContentEncoding = Encoding.UTF8;
Response.ContentType = "application/json";
Response.Write(jsonString);
Response.Flush();
Response.End();
}
}
HomeController.cspublicclassHomeController : ControllerBase {
[ControllerAction]
publicvoidAjaxTest() {
RenderView("AjaxPage");
}
[ControllerAction]
publicvoidAjax(intid) {
switch(id) {
case1:
RenderJSON(DateTime.Now.ToString());
break;
case2:
Order[] orders = newOrder[] {
newOrder() {PK=1, Title="B001", OrderDate = DateTime.Now},
newOrder() {PK=2, Title="A003", OrderDate = DateTime.Now}
};
RenderJSON(orders);
break;
case3:
intn1,n2;
int.TryParse(Request["n1"],outn1);
int.TryParse(Request["n2"],outn2);
RenderJSON(n1 + n2);
break;
}
}
}
}
AjaxPage.aspx
$(document).ready(function() {
varactionUrl1 = '<%=Html.ActionUrl("ajax", "/1") %>';
varactionUrl2 = '<%=Html.ActionUrl("ajax", "/2") %>';
varactionUrl3 = '<%=Html.ActionUrl("ajax", "/3") %>';
$("#link1").click(function() {
$.getJSON(actionUrl1, { }, function(json){
alert("Server Time: "+ json);
});
});
$("#link2").click(function() {
$.getJSON(actionUrl2, { }, function(json){
alert("total "+ json.length.toString() + "records");
for(vari=0;i alert(json[i].PK + ", "+ json[i].Title + ", "+ json[i].OrderDate);
}
});
});
$("#t1,#t2").change(function() {
$.getJSON(actionUrl3, { "n1": $("#t1").val(),"n2": $("#t2").val() }, function(json){
$("#t3").val(json.toString());
});
});
});
Ajax Page
- Get Server Time
- Return Object
-
+
=
本文转自
http://blog.csdn.net/lee576/archive/2008/04/10/2278394.aspx