asp.net mvc(八)

來源:互聯網
上載者:User

         ASP.NET MVC正式版都已經出來很長時間了,但一直沒有用它做具體項目,所以之前的學習記錄僅限於自娛自樂。去年年底開始,趕上公司開始重構所有原來的老項目,技術正好選用了ASP.NET MVC,重構組的同事為我們開發人員更高效的利用MVC模式開發,整理出一些公用模組供開發人員調用,減少開發人員自我學習的成本。

         從今天開始我會陸續把我認為的一些不錯的技術分享給大家,同時由雩都屬於學習階段,所以提供的方案並不一定有多最佳化,如有問題大家請多多指教。
  
         這一篇,我來分享下MVC下如何快速開發ajax程式。
   
         話說開發ajax程式非常簡單,就算自己寫ajax處理常式也不用花多少時間,相關內容可參考 寫一個ajax程式就是如此簡單   ,如果採用一些成熟的js架構,例如jquery,prototype  等,更加會事半功倍。在用傳統的web form方式時,我們都需要建立一個aspx頁面(或者ashx)以及後台代碼來處理這些ajax請求,但有了MVC,我們就沒有必要單獨建立這樣的檔案了,因為ajax請求的方法可以和頁面的controller類放在一起。不知道大家有沒有用過ajaxpro,.net2.0時我網上搜的一個基於服務端的ajax實現方案。它能讓開發人員通過js直接非同步呼叫頁面後台代碼,且調用的方法可以和頁面類放在一起,一般是在需要調用的方法前加一個AjaxMothod的特性標籤。單從開發員實現角度來說,非常方便,開發員並不用關心它的實現方法。
   
         MVC有個特點,一般情況下一個分頁檔都會對應一個Controller,類似於web form模式下的頁面後台代碼。Conntroller裡面的每個公用方法(私人方法不行)都可以通過頁面地址中訪問,例如我們在HomeController中有這樣一個方法:
        

        public   void Test(int i)
        {
            System .Web .HttpContext .Current .Response .Write ("aaa"+i .ToString ());
        }

  

       我們可以在瀏覽器中輸入/Home/Test?i=1,此時頁面上就會輸出我們想要的內容,這也是web form模式沒有辦法直接實現的。即然MVC能夠直接調用Controller中的方法,也就是我們不用單獨建立一些類來實現,這點和ajaxpro的功能有點相似。下面我們就來實現在asp.net mvc中應用ajax,當然我選用jquery做為js架構,熟悉jquery的朋友看起來就非常容易了。
    
      1:建立一個學生類的集合,學生類結構如下:
     

    public class student
    {
        public string sname { get; set; }
        public int ID { get; set; }
        public int Grade { get; set; }
    }

 

     2:寫一個根據學生ID尋找學生資訊的方法。這裡注意下,這個方法的傳回型別為JsonResult,它能夠給用戶端以json類型輸出資料(MVC能夠把目標對象轉換成json格式),這個和平時常見的ActionResult有所區別。
     

代碼

public JsonResult TestMVC(int i, int j)
        {
            int I = 0;
            List<student> list = new List<student>();
            for (int k = 0; k < 10; k++)
            {
                student sd = new student() { sname = "aaa" + k.ToString() + j.ToString(), ID = k, Grade = k * 10 };
                list.Add(sd);
            }
            var stu = (from m in list
                       where m.ID == i
                       select m
                         ).FirstOrDefault();

            JsonResult J = new JsonResult();
            J.Data = stu;
            return J;
        }

      
      3:用戶端代碼:從後台取得資料後,填充到div中。
       

$.getJSON('/Home/TestMVC',{i:1,j:2},
                function(data) {
                    $("#divStudent").html(data.sname);
                }
                );

             
       分析:以上三步基本上就可以實現一般的ajax程式,如有不同,也只可能是程式寫法問題,大體流程都差不多應該相同。這種寫法已經非常簡潔了,但還有可以提高的地方。

             第一:開發人員需要拼接ajax請求的地址。本例中為Home/TestMVC
             第二:開發人員需要準備構建ajax方法使用的data參數。本例中為,{i:1,j:2}
       
      解決思路:讓程式自動為我們完成上面兩步。可以參考ajaxpro的實現原理,每個方法非同步請求的方法上加一個自訂特性標籤,編譯器遇到自訂標籤後,自動產生一些js方法,來讓開發人員前端調用更加方便。例如產生如下代碼:i,j分別是非同步要求方法的兩個參數,callback為非同步請求後的回調方法。
       

代碼

   var HomeController = {
            TestMVC: function(i, j,callback)
                                                {
                                                     $.getJSON('/Home/TestMVC?id=&',{i:i, j:j}, callback);
                                                }
        }

  

     我們可以這樣調用:我們只需要輸入相應參數,以及完成回調方法即可。是不是簡單了點。下一篇來講講具體實現方法。
        

HomeController.TestMVC(j,j+1, function(data) {
             $("#divStudent").html(data.sname);
             });

 

 

作者:薑敏
出處:http://www.cnblogs.com/aspnet2008/ 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.