3

複数のリンクを含むページがあります。これらのリンクは 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 を戻り値に追加することでこれを修正できますが、これはページで定義されたコールバック関数を使用せず、失敗します。

どんな助けでも大歓迎です。

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 に答える