我一直在谷歌搜索/ SO:这个问题有一段时间,许多人似乎正在分享,但我没有找到任何成功的解决方案我的问题。
使用MVC3和剃刀。
>主页包含:
< script src =“@ Url.Content(”〜/ Scripts / jquery-1.5.min.js“)”type =“text / javascript”>< / script>
< script src =“@ Url.Content(”〜/ Scripts / MicrosoftAjax.js“)”type =“text / javascript”>< / script>
< script src =“@ Url.Content(”〜/ Scripts / MicrosoftMvcAjax.js“)”type =“text / javascript”>< / script>
> AjaxTest.cshtml包含:
< div id =“AjaxTestDiv”> content< / div>
@ Ajax.ActionLink(“Update”,“AjaxTester”,新的AjaxOptions {UpdateTargetId =“AjaxTestDiv”})
> AjaxTester动作方法:
public string AjaxTester() { if (Request.IsAjaxRequest()) { return DateTime.Now.ToString(); } else { return "FAIL"; } }
我总是得到“FAIL”返回,到一个空白页,不在目标div。
编辑:还要注意,如果我删除if(Request.IsAjaxRequest()),我仍然没有回到任何目标的div,而是一个空白的页面。
<a data-ajax="true" data-ajax-method="POST" data-ajax-mode="replace" data-ajax-update="#AjaxTestDiv" href="/Area/AjaxTester">Update</a>
尝试将方法切换到GET,无效。
解决方法
默认情况下,ASP.NET MVC 3对所有Ajax。* helpers都使用不引人注意的jQuery。所以首先要摆脱所有的MicrosoftAjax脚本(这个无用的c ** p),并改为:
<script src="@Url.Content("~/Scripts/jquery-1.5.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
然后在您的web.config中简单地激活不引人注目的AJAX(如果尚未完成):
<appSettings> <add key="ClientValidationEnabled" value="true"/> <add key="UnobtrusiveJavaScriptEnabled" value="true"/> </appSettings>
现在,jquery将不引人注目地AJAXify包含这些HTML 5 data- *属性的所有链接。
甚至更好的IMHO:
在你看来,只是:
@Html.ActionLink("Update","AjaxTester",new { id = "mylink" })
并在一个单独的javascript文件AJAXify这个锚点:
$(function() { $('#mylink').click(function() { $('#AjaxTestDiv').load(this.href); return false; }); });