由於微博是一個前端與後端互動相應頻繁的系統,所以,ajax的開發也要相應有規範
*本系統是asp.net mvc開發的
首先建倆個model,(其中一個用於分頁的)
public class JsonModel { public string Code { get; set; } public object Data { get; set; } public JsonModel(string code, object data) { Code = code; Data=data; } } public class PagerJsonModel : JsonModel { public int Count { get; set; } public PagerJsonModel(string code, object data,int count):base(code,data) { Count = count; } }
Code為處理結果代碼,是一個枚舉值,Data表示要傳輸的實際資料
public struct CodeStruct { //已經登入 public static string HaveLogon = "A00000"; public static string NoLogin = "A00001"; public static string NoUserExist = "A00002"; public static string Error = "A00003"; 。。。。
然後在control裡面這樣寫,例如
public JsonResult JudgeLogin() { if (!IsLogin) return NotLogin(); else return Json(new JsonModel(CodeStruct.HaveLogon, new { name = CurrentUser.NickName, id = CurrentUser.ID })); }
調用的話會返回資料,例如
{"Code":"A00000","Data":{"name":"天才程式員","id":6}}
前端調用
$(function () { $.ajax({ url: "/Ajax/JudgeLogin", datatype: "json", cache: false, type: "post", success: function (o) { if (o.Code == "A00000") { //todo alert(CodeList[o.Code]);
} else{ //todo } });
同時前端也有相應的枚舉資料,例如:
var CodeList = { A00000: "已登入", A00001:"還沒有登入", A00002:"使用者不存在", A00003:"出錯,請稍後再試", ....
那麼假如要返回一些資料是html代碼,來自於由某個view和model渲染出來的代碼,我使用了以下的代碼來轉換
/// <summary> /// 渲染cshtml頁面成字串 /// </summary> /// <param name="viewName">頁面名</param> /// <param name="model">模型</param> /// <returns></returns> public string RenderRazorViewToString(string viewName, object model) { ViewData.Model = model; using (var sw = new StringWriter()) { var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); viewResult.View.Render(viewContext, sw); return sw.GetStringBuilder().ToString(); } }
然後調用
string data = RenderRazorViewToString("GetCommentsHtml", model); if (!string.IsNullOrEmpty(data)) { return Json(new JsonModel(CodeStruct.ReturnSuccess, data)); }
這樣返回的html資料可以填充到一個容器裡面去顯示。
打完繼續搵工
源碼發布頁http://www.cnblogs.com/baichidetiankong/archive/2012/04/17/weibo_source.html