これについていくつかのスレッドを見てきましたが、すべての答えを試してみました( ASP.NET MVC JsonResult return 5 )
私のajaxリクエストは500内部エラーを返しています。デバッグする場合、自分のアクションに到達することさえありません。
ここに私のajax呼び出しがあります:
$.ajax({
url: '@Url.Action("UpdateSortOrder", "FormItems")',
data: { itemToUpdateId: item.attr("id"), newParentItemId: parentItemId, newPreviousItemId: previousItemId },
type: 'POST',
success: function (data) {
console.log(data);
},
error: function (xhr, status, exception) {
console.log("Error: " + exception + ", Status: " + status);
}
});
そして私の行動:
[HttpPost]
public ActionResult UpdateSortOrder(Guid itemToUpdateId, Guid newParentItemId, Guid newPreviousItemId)
{
FormItem updatedItem = _formItemService.GetOne(x => x.Id == itemToUpdateId);
return Json(updatedItem, JsonRequestBehavior.DenyGet);
}
chrome consoleを使用すると、これらは応答からの応答ヘッダーです。
HTTP/1.1 500内部サーバーエラーCache-Control:private Content-Type:text/html; charset = utf-8サーバー:Microsoft-IIS/7.5 X-AspNetMvc-Version:3.0 X-AspNet-Version:4.0.30319 X-Powered-By:ASP.NET日付:Tue、18 Dec 2012 21:53:41 GMTコンテンツの長さ:17041
サーバーログにはサブステータスコードは表示されません。ここで私が間違っていることは何ですか? GETの代わりにPOSTを使用することを好みます。
フォームデータは次のように表示されています。
itemToUpdateId:18ac5399-342e-4a39-9da1-3281a89501df
newParentItemId:null
newPreviousItemId:null
どちらが正しい。
ContentTypeをapplication/jsonに設定して、この質問のように従来の= trueを試しました: "application/json; charset = utf-8"でmvcにajaxポストを送信すると、vs Webデベロッパーサーバーからエラー500が返されます
同じエラー。
まあ、私は問題が何であるかを理解することができました、私のAJAX構文、さらにはアクションに問題はありませんでした。返されたオブジェクトに循環参照が含まれていただけです。 chromeコンソールでPOST [ネットワーク]タブの下のリクエストをクリックし、プレビュータブを表示して実際のエラーメッセージを表示します。
Fiddler は、HTTPリクエストをキャッチするための優れたツールであり、クライアント側とサーバー側の間の応答をデバッグするのに非常に役立ちます。ブラウザで問題が疑われる場合に開き、エラーが発生した場合は、フィドラーを開いてリクエストを選択し、生の情報を表示します。
古い投稿、代替回答...誰かがここにたどり着く場合に備えて..
私の問題は、呼び出しているコントローラーアクションがパーシャルビューアクションの結果とPartialView .cshtml
ファイルはサーバーに公開されていませんでした(公開時にVisual Studioプロジェクトに "含まれていませんでした")。
updatedItemが成功する必要がない場合は、単純な変数を返すだけで返されません