我有一个包含多个链接的页面。这些链接应该做一个ajax帖子和回调。但是,该链接正在执行Get而不是Post。这会导致404错误,因为我没有动作方法来处理请求的URL的获取。
如果我从Action方法中删除了HTTPPost属性,则该链接可以正常工作,但是回调失败并且我返回的Json将在新页面中呈现。
以下是我在视图中使用的代码。
<td id="action-@item.ItemID">@Ajax.ActionLink("Add", "AddToOrder", new { itemID = item.ItemID }, new AjaxOptions { HttpMethod = "POST", OnSuccess = "actionCompleted" }, new { id = "add-" + item.ItemID })</td>
这最终会添加此HTML:
<td id="action-012679"><a data-ajax="true" data-ajax-method="POST" data-ajax-success="actionCompleted" href="/mysite/neworder/AddToOrder?itemID=012679" id="add-012679">Add to Order</a></td>
我的控制器具有以下操作方法。
[HttpPost]
public JsonResult AddToOrder(string itemID) {
return Json(new { id = itemID, Action = "Added", "Just getting this working"});
}
在Success上调用的回调方法如下所示:
<script language="javascript" type="text/javascript">
function actionCompleted(response, status, data) {
alert("We have returned");
}
</script>
如果我将action方法的[HTTPPost]属性更改为[HTTPGet],我会收到Json错误。我可以通过将JsonRequestBehavior.AllowGet添加到我的返回值来解决这个问题,但这不会使用页面上定义的回调函数而失败。
任何帮助将不胜感激。
答案 0 :(得分:6)
可能你没有附加到页面的jquery.unobtrusive-ajax.js脚本,链接正常降级为常规锚点。
答案 1 :(得分:1)
为了使其正常工作。您需要在页面上添加对这些脚本的引用:
MicrosoftAjax.js MicrosoftMvcAjax.js