[轉]Asp.net MVC 中Ajax的使用

             Asp.net MVC 拋棄了Asp.net WebForm那種高度封裝的控件,讓咱們跟底層的HTML有了更多的親近。能夠更自由、更靈活的去控制HTML的結構、樣式和行爲。而這點對於Ajax的應有來講,Asp.net MVC確實要比WebForm優秀不少。我對Asp.net MVC更便捷的使用Ajax作了一下探討,拿出來分享,歡迎拍磚。javascript

第1、直接寫JS代碼實現Ajax:html

由於Asp.net 瀏覽器端的代碼能更好的控制,因此咱們徹底能夠在HTML中直接經過JS發出Ajax請求,而在Controller的action中返回XML或者Json,來實現Ajax效果,這種方法是最原始的方法,須要考慮瀏覽器和諸多問題,不推薦使用。java

參考代碼以下:jquery

JS代碼:web

[javascript]  view plaincopyprint?
  1. var xhr;  
  2.   function getXHR()  
  3.   {  
  4.   try {  
  5.   xhr=new ActiveXObject("Msxml2.XMLHTTP");  
  6.   } catch (e) {  
  7.   try {  
  8.   xhr=new ActiveXObject("Microsoft.XMLHTTP");  
  9.   } catch (e) {  
  10.   xhr=false;  
  11.   }  
  12.   }  
  13.   if(!xhr&&typeof XMLHttpRequest!='undefined')  
  14.   {  
  15.   xhr=new XMLHttpRequest();  
  16.   }  
  17.   return xhr;  
  18.   }  
  19.   function openXHR(method,url,callback)  
  20.   {  
  21.   getXHR();  
  22.   xhr.open(method,url);  
  23.   xhr.onreadystatechange=function()  
  24.   {  
  25.   if(xhr.readyState!=4)return;  
  26.   callback(xhr);  
  27.   }  
  28.   xhr.send(null);  
  29.   }  
  30.   function loadXML(method,url,callback)  
  31.   {  
  32.   getXHR();  
  33.   xhr.open(method,url);  
  34.   xhr.setRequestHeader("Content-Type","text/xml");  
  35.   xhr.setRequestHeader("Content-Type","GBK");  
  36.   xhr.onreadystatechange=function()  
  37.   {  
  38.   if(xhr.readyState!=4)return;  
  39.   callback(xhr);  
  40.   }  
  41.   xhr.send(null);  
  42.   }  

後臺代碼:ajax

  1. public ActionResult GetNews(int CategoryID)  
  2.         {  
  3.             NewsCollectionModel newsCollection = new NewsCollectionModel();  
  4.             …………  
  5.             JsonResult myJsonResult = new JsonResult();  
  6.             myJsonResult = newsCollection;  
  7.             return myJsonResult;  
  8.         }  

第二種:使用Jquery進行Ajax調用:瀏覽器

在VS 2010中,IDE全面支持Jquery的智能顯示,在開發中使用Jq來實現JS效果很是的棒,並且能夠節省不少精力和時間。因此在Ajax中使用JQuery進行開發,也是一種不錯的方法。服務器

大概的實現代碼以下:session

  1. <% using (Html.BeginForm("AddComment","Comment",FormMethod.Post,new {@class="hijax"})) { %>      
  2.     <%= Html.TextArea("Comment", new{rows=5, cols=50}) %>  
  3.     <button type="submit">Add Comment</button>  
  4.          <span id="indicator" style="display:none"><img src="http://www.cnblogs.com/content/load.gif" alt="loading..." /></span>                                   
  5. <% } %>  
  6. 在View中引用Jquery:  
  7. <script src="http://www.cnblogs.com/Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>  
  8. 添加下面腳本:  
  9. <script type="text/javascript">  
  10.     //execute when the DOM has been loaded  
  11.     $(document).ready(function () {  
  12.         //wire up to the form submit event  
  13.         $("form.hijax").submit(function (event) {  
  14.             event.preventDefault();  //prevent the actual form post  
  15.             hijack(this, update_sessions, "html");  
  16.         });  
  17.     });  
  18.   
  19.     function hijack(form, callback, format) {  
  20.         $("#indicator").show();  
  21.         $.ajax({  
  22.             url: form.action,  
  23.             type: form.method,  
  24.             dataType: format,  
  25.             data: $(form).serialize(),  
  26.             completed: $("#indicator").hide(),  
  27.             success: callback  
  28.         });  
  29.     }  
  30.   
  31.     function update_sessions(result) {  
  32.         //clear the form  
  33.         $("form.hijax")[0].reset();  
  34.         $("#comments").append(result);  
  35.     }  
  36.   
  37. </script>  

第三種方法:使用微軟自帶的Ajax Helper框架來實現.mvc

  1. <% using (Ajax.BeginForm("AddComment", new AjaxOptions  
  2.                                             {  
  3.                                                 HttpMethod = "POST",   
  4.                                                 UpdateTargetId = "comments",  
  5.                                                 InsertionMode = InsertionMode.InsertAfter                                                  
  6.                                             })) { %>  
  7.       
  8.         <%= Html.TextArea("Comment", new{rows=5, cols=50}) %>  
  9.         <button type="submit">Add Comment</button>  
  10.                                               
  11.     <% } %>  

第二種和第三種方法在博客園有篇博客中有所講解,我直接進行了引用,具體地址以下:http://www.cnblogs.com/zhuqil/archive/2010/07/18/1780285.html

主要是對Ajax helper記錄下我本身的見解和注意的事項。

第1、Ajax Helper是微軟提供的一種Ajax框架,爲了使用Ajax Helper必須使用微軟提供的兩個Js框架:

 

<script src="http://www.cnblogs.com/Scripts/MicrosoftAjax.js" type="text/javascript"></script>
    <script src="http://www.cnblogs.com/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>

第2、Ajax Helper有幾個用法

 

 Ajax.ActionLink():它將渲染成一個超連接的標籤,相似於Html.ActionLink()。當它被點擊以後,將獲取新的內容並將它插入到HTML頁面中。

Ajax.BeginForm():它將渲染成一個HTML的Form表單,相似於Html.BeginForm()。當它提交以後,將獲取新的內容並將它插入到HTML頁面中。

Ajax.RouteLink():Ajax.RouteLink()相似於Ajax.ActionLink()。不過它能夠根據任意的routing參數生成URL,沒必要包含調用的action。使用最多的場景是自定義的IController,裏面沒有action。

Ajax.BeginRouteForm():一樣Ajax.BeginRouteForm()相似於Ajax.BeginForm()。這個Ajax等同於Html.RouteLink()。

而每一個方法裏面的參數會有所不一樣,具體的用法見:http://msdn.microsoft.com/zh-cn/library/system.web.mvc.ajaxhelper_methods(v=VS.98).aspx

其中一個重要的參數爲:AjaxOption,存在有如下幾個屬性,主要是來規定Ajax的行爲的。


  名稱 描述
公共屬性 Confirm 獲取或設置提交請求以前,顯示在確認窗口中的消息。
公共屬性 HttpMethod 獲取或設置 HTTP 請求方法(「Get」或「Post」)。
公共屬性 InsertionMode 獲取或設置指定如何將響應插入目標 DOM 元素的模式。
公共屬性 LoadingElementDuration 獲取或設置一個值(以毫秒爲單位),該值控制顯示或隱藏加載元素時的動畫持續時間。
公共屬性 LoadingElementId 獲取或設置加載 Ajax 函數時要顯示的 HTML 元素的 id 特性。
公共屬性 OnBegin 獲取或設置更新頁面以前,剛好調用的 JavaScript 函數的名稱。
公共屬性 OnComplete 獲取或設置實例化響應數據以後但更新頁面以前,要調用的 JavaScript 函數。
公共屬性 OnFailure 獲取或設置頁面更新失敗時,要調用的 JavaScript 函數。
公共屬性 OnSuccess 獲取或設置成功更新頁面以後,要調用的 JavaScript 函數。
公共屬性 UpdateTargetId 獲取或設置要使用服務器響應來更新的 DOM 元素的 ID。
公共屬性 Url 獲取或設置要向其發送請求的 URL。
相關文章
相關標籤/搜索