在开始使用Ajax辅助方法前,必须在页面中载入jQuery以及jquery.unobtrusive-ajax.js文件才能正常执行。
为了让网站载入适当的JS函数库,必须先让Layout页面载入适当的JS文件,在MVC4模板中,默认已将Jquery文件加入,代码如下:
1 @Scripts.Render("~/bundles/jquery") 2 @RenderSection("scripts", required: false)
其中@Scripts.Render("~/bundles/jquery")即是载入“jquery-x.x.x.js"文件。因为ajax功能并不是每一页都需要使用,所以在预设中没有载入。如果需要在页面中使用ASP.NET MVC的Ajax辅助方法,可以在每个需要使用Ajax辅助方法的页面上加上如下@section语法:
@section scripts { <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")"></script> }
先前学过@Html.ActionLink辅助方法,用来输出一个超链接,示例:@Html.ActionLink("获取当前的时间","GetTime")
程序就会跳转到GetTime控制器。那么如果不希望浏览器跳转网页,而是将/Home/GetTime网页的执行结果回传到当前网页的div中,该如何操作呢?
1 @Ajax.ActionLink("取得当前的时间", "GetTime", new AjaxOptions { UpdateTargetId = "now" }) 2 3 <div id="now"></div>
这样一来,当点击ActionLink以后,从GetTime网页的执行结果回传到id为now的div中。但是这种方式的缺陷是,ajax请求只会被触发一次,只要ajax调用的网址没有改变,并且远端的Http没有包含缓存相关标头,那么浏览器就不会发出Ajax请求,即点击ActionLink无效。
如果你的Ajax回传的数据必须及时更新,那么Action方法定义时,需要添加OutputCache属性,强迫浏览器不要缓存这一页,代码如下:
1 [OutputCache(NoStore=true,Duration=0)] 2 public ActionResult GetTime() 3 { 4 return Content(DateTime.Now.ToString("F")); 5 }