我有一个带有以下Ajax.ActionLink定义的视图
@Ajax.ActionLink(@Model.Game.VisitorTeam.FullName, "SelectTeam", new { gameID = @Model.Game.GameID, pickID = @Model.Game.VisitorTeam.TeamID }, new AjaxOptions { HttpMethod = "POST", OnSuccess = "pickMade" }, new { id = "vpick-" + @Model.Game.GameID });
这是我的控制器中定义的Action。
public JsonResult SelectTeam(int gameID, int pickID) {
var user = Membership.GetUser(User.Identity.Name);
var message = "Pick Submitted";
var userID = (Guid) user.ProviderUserKey;
_pickService.SubmitPick(userID, gameID, pickID);
return Json(new {id = gameID, teamID = pickID, message}, JsonRequestBehavior.AllowGet);
}
当我点击页面上的链接时,它会在我的控制器中回复我的Action,执行代码并返回Json结果。但是,一旦客户端获得结果,浏览器将打开“另存为”对话框。如果我保存文件,这是我的Json结果,按预期返回。我不知道为什么没有调用我的'pickMade'函数来处理回发的结果。
在我的其他应用程序中,我正在使用[AcceptVerbs(HttpVerbs.Post)]属性。但是,如果我在此应用程序中尝试此操作,则从我的视图中调用操作时会出现404错误。如果我删除该属性,我必须将JsonRequestBehavior.AllowGet添加到我的返回值。
我在另一个应用程序中有非常相似的功能,它工作正常。我不确定发生了什么,所以感谢任何帮助。
答案 0 :(得分:3)
你有2个解决方案(我猜)。
1 /在Web.config中停用不显眼的Javascript
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="false" />
</appSettings>
2 /包括MicrosoftAjax.js和MicrosoftMvcAjax.js脚本文件
<script src="@Url.Content("~/Scripts/MicrosoftAjax.debug.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.debug.js")" type="text/javascript"></script>
1 /保持启用不显眼的Javascript(默认情况下)
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
2 /包含jquery-unobtrusive javascript文件。
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
已多次出现此问题而且我一直都在工作:/!