我一直在谷歌搜索/ SO:这个问题有一段时间了,很多人似乎都在分享这个问题,但我没有找到任何成功解决我的问题的方法。
使用MVC3和Razor。
母版页包含:
<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", new AjaxOptions { UpdateTargetId = "AjaxTestDiv" })
AjaxTester操作方法:
public string AjaxTester()
{
if (Request.IsAjaxRequest())
{
return DateTime.Now.ToString();
}
else
{
return "FAIL";
}
}
我总是将“失败”返回到空白页面,而不是目标div。
编辑:另请注意,如果我删除if(Request.IsAjaxRequest()),我仍然不会返回目标div,而是返回空白页。
Edit2:查看生成的HTML,这是我的链接:
<a data-ajax="true" data-ajax-method="POST" data-ajax-mode="replace"
data-ajax-update="#AjaxTestDiv" href="/Area/AjaxTester">Update</a>
尝试将方法切换到GET,但无济于事。
答案 0 :(得分:47)
默认情况下,ASP.NET MVC 3对所有Ajax.*
帮助程序使用不显眼的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-*
属性的所有链接。
甚至更好的恕我直言:
在您看来简单:
@Html.ActionLink("Update", "AjaxTester", new { id = "mylink" })
并在一个单独的javascript文件中AJAXify这个锚:
$(function() {
$('#mylink').click(function() {
$('#AjaxTestDiv').load(this.href);
return false;
});
});
答案 1 :(得分:1)
可以使ActionLink无法正常运行的另一个特定于IE的问题在此处介绍:ASP.NET MVC - Prevent Cache on Ajax.ActionLinks
基本上,IE有时会缓存Ajax GET请求,因此将AjaxOption的HttpMethod设置为POST是构建ActionLink的一种不太脆弱的方式:
@Ajax.ActionLink(
item.Name + " (Ajax link test)",
"MyActionName",
routeValues: new { id = item.Id },
ajaxOptions: new AjaxOptions()
{
UpdateTargetId = "divToUpdate",
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST"
})
答案 2 :(得分:0)
对于那些仍然面临此问题的人:
您的项目中的某处应具有以下文件:
如果没有,以下是nuget软件包,请从Visual Studio项目或软件包管理器控制台的nuget Manager中下载该软件包: https://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Validation/3.2.11/
在您各自的视图或布局文件的jquery.min.js最新版本之后提供上述添加文件的参考: