jQuery AJAX发布到MVC Controller对象 - 请求显示为null [英] jQuery AJAX post to MVC Controller object -- request shows up null
问题描述
我知道我在这里遗漏了一些细节。
I know I'm missing something in the details here.
尽管使用谷歌搜索,尝试示例,不同的格式等,我发送的AJAX请求始终是验证为所有字段都为空,但不是null。
Despite Googling, trying examples, different formats, etc, the AJAX request that I send always is validated as having all fields empty, but not being null.
我认为我没有以适当的格式发送内容让控制器将其识别为对象但我我不确定是什么。
I think I'm not sending things in the proper format for the controller to recognize it as an object but I'm not sure what.
使用一些虚拟数据:
public class ContactUsMessage
{
public string Email { get; set; }
public string Name { get; set; }
public string PhoneNumber { get; set; }
public string Message { get; set; }
}
代码:WebAPI控制器
Code: WebAPI Controller
[HttpPost]
public HttpResponseMessage NewMessage(ContactUsMessage messageToSend)
{
if (messageToSend == null)
{
var sadResponse = Request.CreateResponse(HttpStatusCode.BadRequest, "Empty Request");
return sadResponse;
}
var messageValidator = new ContactUsMessageValidator();
var results = messageValidator.Validate(messageToSend);
var failures = results.Errors;
var sadString = "";
if (!results.IsValid)
{
foreach (var error in failures)
{
sadString += " Problem: " + error.ErrorMessage;
}
var sadResponse = Request.CreateResponse(HttpStatusCode.NotAcceptable, "Model is invalid." + sadString);
return sadResponse;
}
else
{
SendContactFormEmail(messageToSend.Email, messageToSend.Name, messageToSend.PhoneNumber, messageToSend.Message);
}
代码:页面上的JavaScript
Code: JavaScript on Page
function sendSubmissionForm() {
var dataObject = JSON.stringify(
{
messageToSend: {
'Email': $('#inpEmail').val(),
'Name': $('#inpName').val(),
'PhoneNumber': $('#inpPhone').val(),
'Message': $('#inpMessage').val()
}
});
$.ajax({
url: '/api/contactus/newmessage',
type: 'POST',
done: submissionSucceeded,
fail: submissionFailed,
data: dataObject
});
}
推荐答案
当您JSON.stringifyied您的数据对象时,您将其转换为JSON。但是您忘记设置Content-Type请求标头,而Web API无法知道您是要发送JSON,XML还是其他内容:
When you JSON.stringifyied your data object you converted it to JSON. But you forgot to set the Content-Type request header and the Web API has no way of knowing whether you are sending JSON, XML or something else:
$.ajax({
url: '/api/contactus/newmessage',
type: 'POST',
contentType: 'application/json',
done: submissionSucceeded,
fail: submissionFailed,
data: dataObject
});
同样在构建JSON时,您不需要将其包装在与您的方法匹配的附加属性中参数名称。以下内容也应该有效:
Also when building the JSON you don't need to wrap it in an additional property that matches your method argument name. The following should work as well:
var dataObject = JSON.stringify({
'Email': $('#inpEmail').val(),
'Name': $('#inpName').val(),
'PhoneNumber': $('#inpPhone').val(),
'Message': $('#inpMessage').val()
});
这篇关于jQuery AJAX发布到MVC Controller对象 - 请求显示为null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!