jQuery AJAX发布到MVC Controller对象 - 请求显示为null [英] jQuery AJAX post to MVC Controller object -- request shows up null

查看:98
本文介绍了jQuery AJAX发布到MVC Controller对象 - 请求显示为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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆