私はこの問題に関してほとんどの答えを試してみたが、この問題に対処していないと言って始めたいと思います。JSONはMVCアクションへのAJAXポストを行うときにオブジェクトに逆シリアル化されません
jQuery ajaxリクエスト経由でコントローラのアクションに投稿するときに問題があります。
これは私のJSONオブジェクトです:
var service = {
ServiceID: $('#ServiceID').val(),
ServiceName: $('#ServiceName').val(),
ServiceActive: $('#ServiceActive').val(),
ServiceDescriptionShort: $('#ServiceDescriptionShort').val(),
ServiceDescription: $('#ServiceDescription').val()
};
これが私のクラスである:
public class ServiceJson
{
public int ServiceID
{
get;
set;
}
public string ServiceName
{
get;
set;
}
public bool ServiceActive
{
get;
set;
}
public string ServiceDescriptionShort
{
get;
set;
}
public string ServiceDescription
{
get;
set;
}
}
これは私の行動である(それは今のところ何もしませんが、それはポイントではありません):
[HttpPost]
[Route("edit")]
[ValidateJsonAntiForgeryToken]
public JsonResult Edit(ServiceJson service)
{
return Json("", JsonRequestBehavior.AllowGet);
}
最後に、これは私のAjaxリクエストです。
$.ajax(
{
type: 'POST',
url: '@Url.ActionWithoutData("edit", "service")',
data: JSON.stringify(service),
headers: {
"__RequestVerificationToken": $('input[name="__RequestVerificationToken"]').val()
},
contentType: 'application/json; charset=utf-8',
dataType: 'json',
processData: false,
contentType: false,
success: function (responseData) {
$('#ServiceID').val(responseData.ServiceID);
$.snackbar({ content: 'Successfully saved.' });
},
error: function (xhr, ajaxOptions, thrownError) {
$('#errorMessage').html(xhr.responseJSON.Message);
$('#error').modal('toggle');
}
});
私の問題は、このJSONオブジェクトが自分のクラスにシリアル化されていないことです。明らかに名前が対応しています。私はただの名前を渡す(ともちろんそれに対応するアクションパラメータを変更する)ような単純なパラメータを試してみたので、些細なことを忘れていると確信しています。リクエストオブジェクトでデータを受け取っているが、オブジェクトにデシリアライズされていないことがわかります。
ブラウザでは、オブジェクトが正しく渡されていることもわかります。
ヘルプ!
'data:service 'を削除し、' contentType:' application/json; charset = utf-8 '、 '、' processData:false、 'contentType:false、' –
アクションパラメータのServiceJsonサービスがNULLですか? –
アクションなしでデータを処理するには –