本系列目錄:ASP.NET MVC4入門到精通系列目錄彙總javascript
非入侵式,通俗來說:就是將嵌入在Html中的JavaScript所有取出來,放在單獨的 js 文件中,html標籤中不要出現任何onclick、onload 等html
Unobtrusive Ajax :方便程序員編寫簡單易於維護的ajax代碼(Code is cleaner and easier to maintain)。java
1.網頁內容和表單使用純 HTML;jquery
2.不借助 JavaScript,表單和超級鏈接也能正常使用;程序員
3.頁面外觀徹底由 CSS 控制,而不是 HTML(不要用 table 來佈局) 或 JavaScript;ajax
4.任何人都能經過任何設備(考慮不支持JavaScript的設備)訪問;json
ASP.NET MVC4中,已經默認開啓客戶端驗證和非侵入式js。Web.config中服務器
<add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" />
頁面添加非入侵js文件app
<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>
異步連接按鈕
注意:必須開啓 非入侵式 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>
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請求,須要開啓。
除了url指向 控制器的 Action方法外,其它和之前同樣
具體參見 Jquery幫助文檔 ajax 方法:
$.ajax
$.post
$.load
$.get
導入腳本:
<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");
}