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");
}

 

相关文章