14、ASP.NET MVC入門到精通——Ajax


本系列目錄:ASP.NET MVC4入門到精通系列目錄匯總

Unobtrusive Ajax使用方式(非入侵式)

非入侵式,通俗來講:就是將嵌入在Html中的JavaScript全部取出來,放在單獨的 js 文件中,html標簽中不要出現任何onclick、onload 等

Unobtrusive Ajax 方便程序員編寫簡單易於維護的ajax代碼(Code is cleaner and easier to maintain)。

基本特點

1.網頁內容和表單使用純 HTML;

2.不借助 JavaScript,表單和超級連接也能正常使用;

3.頁面外觀完全由 CSS 控制,而不是 HTML(不要用 table 來布局) 或 JavaScript;

4.任何人都能通過任何設備(考慮不支持JavaScript的設備)訪問;

 ASP.Net MVC 全局開啟非入侵ajax

ASP.NET MVC4中,已經默認開啟客戶端驗證和非侵入式js。Web.config中

    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />

頁面添加非入侵js文件

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

可在單個視圖頁面(View)上關閉

@{Html.EnableUnobtrusiveJavaScript(false);}
@{Html.EnableClientValidation(false);}

注意下js引用順序

<script src="@Url.Content("~/Scripts/jquery.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

AjaxHelper

異步鏈接按鈕

 注意:必須開啟 非入侵式 Ajax:導入Jquery和unobtrusiveAjax文件

View中:@Ajax.ActionLink 創建 ajax 超鏈接按鈕,一般用來請求動態生成的部分html代碼(分部視圖)

@Ajax.ActionLink("鏈接文本", "PartialViewTest", new AjaxOptions() {
                         UpdateTargetId="divMsg",//數據顯示的html容器id
                         InsertionMode= InsertionMode.Replace, //替換容器內容
                         HttpMethod="Post" })

Controller中

        public PartialViewResult PartialViewTest()
        {
            ViewData["Msg"] = "Hello world!";
            return PartialView();
        }

異步表單

View中:@Ajax.BeginForm 創建 異步表單

@using(Ajax.BeginForm("PartialViewTest","Home",new AjaxOptions{
         UpdateTargetId="msgDiv" , InsertionMode= InsertionMode.Replace, 
         HttpMethod="post" , OnFailure= "fail",
         LoadingElementId="lodeingmsg"}))
{
    <input type="text" name="txtName" />
    <input type="submit" />
}

Controller:

        public PartialViewResult PartialViewTest()
        {
            ViewData["Msg"] = "Hello world!";
            return PartialView();
        }

示例

View中:@Ajax.BeginForm 創建 異步表單

@using(Ajax.BeginForm("PartialView","Home",new AjaxOptions{
         UpdateTargetId="msgDiv" , InsertionMode= InsertionMode.Replace, 
         HttpMethod="post" , OnFailure= "fail", OnSuccess="success" , 
         OnComplete="comlete", LoadingElementId="lodeingmsg"}))
{
    <input type="text" name="txtName" />
    <input type="submit" />
}
<div id="lodeingmsg" style="display:none;">加載中...</div>
<script type="text/javascript">function fail(xhr) { alert("方法參數是異步對象" + xhr.responseText); }
    function complete(xhr) { alert("方法參數是異步對象" + xhr.responseText); }
    function success(text) { alert("方法參數是響應報文體" + text); }
</script>

UpdateTargetId:目標元素id,獲取服務器響應后,將獲取的響應報文體顯示到目標元素的innerHTML中。
InsertionMode:   InsertAfter 插入目標元素原有內容之后;InsertBefore 插入目標元素原有內容之前,Replace,替換目標元素原有內容
LoadingElementId:異步對象readyState==4之前顯示"正在加載"狀態的元素id
AjaxOptions對象生成【對應】觸發ajax請求的標簽的 屬性

<a data-ajax="true" data-ajax-method="Post" data-ajax-mode="replace" data-ajax-update="#divMsg" href="/Home/PartialViewTest">鏈接文本</a>

請求Json數據

View中:

@Ajax.ActionLink("click here", "DogList", new AjaxOptions() {
                         UpdateTargetId="divMsg",
                         InsertionMode= InsertionMode.Replace, 
                         HttpMethod="Get" })

Controller中:使用 Json方法 返回一個 JsonResult

public ActionResult PartialView() //返回類型也可寫 JsonResult
{
     var  dogList = db.Dogs.ToList();
     return Json(dogList, JsonRequestBehavior.AllowGet);
}

MVC框架默認不允許使用Json響應Get請求,需要開啟。

Jquery請求控制器Action

除了url指向 控制器的 Action方法外,其它和以前一樣
具體參見 Jquery幫助文檔 ajax 方法:
$.ajax   
$.post   
$.load  
$.get

Jquery 模板插件

導入腳本:

<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")"></script>
<script src="@Url.Content("~/Scripts/jquery.tmpl.min.js")"></script>

添加模板-占位符格式:$(json對象屬性名):

<script id="temp" type="text/x-jquery-tmpl">
            <tr>
                <td>${CID}</td><td>${CName}</td><td>${CCount}</td>
            </tr>
</script>

為模板裝載數據並最終生成html,添加到表格中:

function ajaxFinish(jsonObjArray) { //[{CID:"1",CName:"aa",CCount:"1"},....{}]
       $("#temp").tmpl(jsonObjArray).appendTo("#tbList");
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM