簡體   English   中英

jQuery AJAX發布到MVC Controller對象-請求顯示為null

[英]jQuery AJAX post to MVC Controller object — request shows up null

我知道我在這里的細節中遺漏了一些東西。

問題

盡管使用了谷歌搜索,嘗試示例,不同格式等,但我發送的AJAX請求始終被驗證為所有字段均為空,但不為null。

我想我沒有以正確的格式發送內容,以使控制器將其識別為對象,但是我不確定是什么。

提琴手:我的要求是什么樣的

帶有一些偽數據:

在此處輸入圖片說明

代碼:模型類

public class ContactUsMessage
{
    public string Email { get; set; }
    public string Name { get; set; }
    public string PhoneNumber { get; set; }
    public string Message { get; set; }
}

代碼:WebAPI控制器

    [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

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還是發送其他信息:

$.ajax({
    url: '/api/contactus/newmessage',
    type: 'POST',
    contentType: 'application/json',
    done: submissionSucceeded,
    fail: submissionFailed,
    data: dataObject
});

同樣,在構建JSON時,您無需將其包裝在與方法參數名稱匹配的其他屬性中。 以下內容也應該起作用:

var dataObject = JSON.stringify({
    'Email': $('#inpEmail').val(),
    'Name': $('#inpName').val(),
    'PhoneNumber': $('#inpPhone').val(),
    'Message': $('#inpMessage').val()
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM