ajax模組處理–仿新浪微博開源剖析2

來源:互聯網
上載者:User

由於微博是一個前端與後端互動相應頻繁的系統,所以,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

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.