我有一个成功调用我的控制器操作的Ajax.ActionLink,但它没有使用返回值更新目标,而是导航到新页面并显示返回值。
我在视图中有一个不显眼的ajax脚本
<script src="../../Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
这些脚本位于我的布局页面
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.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>
这是我的行动链接:
<span id = "status">Account is Active</span>
@Ajax.ActionLink("Deactivate",
"Deactivate",
"Lender",
new {id = Model.ID},
new AjaxOptions {
HttpMethod = "GET",
Confirm = "Confirm Deactivation",
UpdateTargetId = "status"
})
我的控制器操作:
public string Deactivate(int id) {
var status = "Account is Active";
... // call method to deactivate account
... // set status = "Account is Inactive"
return status;
}
正确设置返回值。那么为什么页面导航而不是做Ajax应该做的事情,坚持下去?
答案 0 :(得分:4)
您需要在页面中加入jquery.unobtrusive-ajax.min.js
库:
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
请注意我是如何将它包含在我的答案中的,这是正确的方法。 不就像这样:
<script src="../../Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>
永远不要在ASP.NET MVC应用程序中硬编码URL。始终使用Url帮助程序。
还要确保在web.config中启用了不显眼的ajax:
<appSettings>
<add key="webpages:Version" value="1.0.0.0"/>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
确保您已完全删除了所有Microsoft*.js
脚本的痕迹。这些都是完全过时的,根本不应该使用。
答案 1 :(得分:0)
将MicrosoftMvcAjax.js
包含在您的脚本列表中。
关于听力不再需要,我不完全确定这是多么真实,我只是发现在使用AjaxHelper
扩展方法时,该文件似乎使所有工作都成功 - 的现成。
我注意到MS的CDN没有显示MVC 4的MicrosoftMvcAjax.js文件,因此可能是使用纯jQuery切换到的版本,但我不能完全确定。