複数のリンクを含むページがあります。これらのリンクは ajax ポストとコールバックを行う必要があります。ただし、リンクは Post ではなく Get を実行しています。要求された URL で get を処理するアクション メソッドがないため、これにより 404 エラーが発生します。
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"});
}
成功時に呼び出されるコールバック メソッドは次のようになります。
<script language="javascript" type="text/javascript">
function actionCompleted(response, status, data) {
alert("We have returned");
}
</script>
アクション メソッドの [HTTPPost] 属性を [HTTPGet] に変更すると、Json エラーが発生します。JsonRequestBehavior.AllowGet を戻り値に追加することでこれを修正できますが、これはページで定義されたコールバック関数を使用せず、失敗します。
どんな助けでも大歓迎です。