首先,我想就此问题尝试过大多数SO答案,但它们均未解决该问题。
通过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对象未序列化到我的类中。 显然,名称对应。 我确信我缺少一些琐碎的东西,因为我尝试过简单的参数,例如只传递名称(当然,更改动作参数以对应于它)而没有运气。 我可以在Request对象中看到我正在接收数据,但是没有将它反序列化到我的对象中。
在浏览器中,我还可以看到该对象已正确传递。
救命!