提交ajax调用后,我在请求标头中确认所有json字段都有值。我不明白的是,当我在服务器端调试时,只有DateEntered字段有一个值(解析为DateTime对象)。当我在使用Postman时输入相同的信息时,它在服务器上工作正常(所有字段都有值)。
控制器方法:
[HttpPost]
public JsonResult SaveJobApplication(ApplicationFormObject jobApplicationObject)
{
return Json(_jobApplicationController.SaveJobApplication(jobApplicationObject), JsonRequestBehavior.AllowGet);
}
Ajax电话:
$.ajax({
url: 'http://myurl.com/SaveJobApplication',
data: JSON.stringify(applicationInfo),
contentType: 'application/json',
type: 'POST'
}).done(function(message) {
// do some stuff
});
以下是上下文:
ajax请求来自不同的来源' http://somedomain.com'而不是我的服务器来源' http://myserverdomain.com'。我已经在Web.Config文件中实现了CORS,如下所示:
...
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
...
这已经过测试,工作正常(我的服务器可以授予其他来源的ajax请求)。
我提交的json对象是这样的:
var applicationInfo = {
FirstObject: {
'NameFirst': 'blah blah',
'NameLast': 'blah blah blah',
'DateEntered': '2012-5-5'
},
SecondObject: {
'LastJob': 'blah blah',
'ReasonQuit': 'blah blah blah'
}
}
服务器上的类/对象是这样的:
// Object that ajax is utilizing
public class ApplicationFormObject
{
public FirstObject FirstObject { get; set; }
public SecondObject SecondObject { get; set; }
}
public class FirstObject
{
public string NameFirst { get; set; }
public string NameLast { get; set; }
public DateTime? DateEntered{ get; set; }
}
public class SecondObject
{
public string LastJob { get; set; }
public string ReasonQuit { get; set; }
}
重要信息
我发送的json对象是动态创建的。我实际上是通过ajax .each遍历表单元素。对于每个元素,我将它添加到一个对象中:
var applicationInfo = {};
$('form input, form select').each(function() {
var that = $(this);
if(isValid(that)) {
applicationInfo["'" + that.attr('id') + "'"] = that.val();
}
});
当我查看请求标头时,它会将JSON显示为以下格式:
{
...
'demoObject': "Value of demo object"
...
}
但是,当我在Postman上测试时,该对象不是动态创建的。我明确地为测试数据逐个填充json对象。当我查看此方法的请求标头时,它会将JSON显示为以下格式:
{
...
demoObject: "Value of demo object"
...
}
不同之处在于第二个示例没有单引号,而第一个示例没有。希望这些信息有意义。请告诉我如何澄清。
答案 0 :(得分:0)
您传递的是无效的模型。
修改您的代码,如下所示:
[HttpPost]
public JsonResult SaveJobApplication(JobApplication jobApplication)
{
return Json(_jobApplicationController.SaveJobApplication(jobApplicationObject), JsonRequestBehavior.AllowGet);
}