3

我有一个包含多个链接的页面。这些链接应该做一个 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>

如果我将操作方法​​上的 [HTTPPost] 属性更改为 [HTTPGet],我会收到 Json 错误。我可以通过将 JsonRequestBehavior.AllowGet 添加到我的返回值来解决此问题,但这不使用页面上定义的回调函数并且失败。

任何帮助,将不胜感激。

4

2 回答 2

6

可能您没有将 jquery.unobtrusive-ajax.js 脚本附加到页面并且链接优雅地降级为常规锚点。

于 2012-09-20T21:10:59.600 回答
1

为了让它正常工作。您需要在页面上添加对这些脚本的引用:

MicrosoftAjax.js MicrosoftMvcAjax.js

于 2012-09-20T21:16:19.753 回答