簡體   English   中英

MVC AJAX POST請求在Controller中顯示為null

[英]MVC AJAX POST request is showing up as null in the Controller

我試圖找出為什么我的AJAX POST請求在到達控制器端時顯示為null 我嘗試了很多變化,但下面是我現在所擁有的。

現在我只是試圖通過類型來獲取問題,因此大多數模型都不需要,並且可以為null。

對我來說最奇怪的是,我不僅可以使用Chrome的調試工具看到數據是請求信息,而且一種非常類似的方法正在運行(盡管該模型中沒有列表。此外,該網站的其他區域,我已經使用該模型進行提交, 並且它有效。

此外,它不僅僅是AJAX,我嘗試過只做常規提交,它也做同樣的事情。

下面我相信是感興趣的一切。 如果需要別的東西,請告訴我。

聊天更新:

QuestionType類型是枚舉,值0-2對它有效。

我嘗試過使用jQuery,包括使用此處顯示的serialize()方法。 這沒什么。

我已經確認了發送的是什么,它是第一個正常提交,第二個是使用jQuery。

“QuestionID = -1&問=為+你+活着” % “3F&類型= 0”


“QuestionID = -1&問=為+你+活着%3F&類型= 0”

模型

public class QuestionnaireViewModel
{

    [Required]
    public QuestionType Type { get; set; }

    public int QuestionID { get; set; }

    [Required]
    public string Question { get; set; }

    public string RadioOption { get; set; }

    public List<string> Options { get; set; }

    public List<bool> MC_Answers { get; set; }

    public string ShortAnswer { get; set; }
}

HTML

<form action="/Staffing/SaveQuestion" class="form-horizontal" method="post" role="form">
    <input data-val="true" data-val-number="The field QuestionID must be a number." data-val-required="The QuestionID field is required." id="QuestionID" name="QuestionID" type="hidden" value="5">
    <div class="form-group">
        <label for="Question">Question</label>
        <input class="form-control editDisplayText" data-val="true" data-val-required="The Question field is required." id="Question" name="Question" type="text" value="">
        <span class="field-validation-valid text-danger" data-valmsg-for="Question" data-valmsg-replace="true"></span>
    </div>
    <div class="form-group">
        <label class="control-label col-md-2" for="Type">Type</label>
        <div class="col-md-10">
            <select class="form-control questionTypeDD" data-val="true" data-val-required="The Type field is required." id="Type" name="Type">
                <option selected="selected" value="0">SHORT</option>
                <option value="1">RADIO</option>
                <option value="2">CHECKBOX</option>
            </select>
        </div>
        <span class="field-validation-valid text-danger" data-valmsg-for="Type" data-valmsg-replace="true"></span>
    </div>
    <div class="form-group">
        <div class="col-md-12">
            <input type="submit" value="Save Edits" class="btn btn-default pull-right">
        </div>
    </div>
</form>

AJAX

function submitQuestion(event) {
    event.preventDefault();
    var radio, checkbox;

    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {

            if (xmlhttp.responseText.indexOf("Success") >= 0) {
                restoreEdit();

                var currentJob = document.getElementById('currentJob');
                if (currentJob != null && currentJob != undefined) {
                    clearQuestions();
                    getJobQuestionsById(currentJob.innerHTML);
                    addQuestionEventHandlers();
                }
                else {
                    alert("Question added successfully");
                }
            }
            else {
                alert(xmlhttp.responseText);
            }
        }
    }

    var form = event.currentTarget;
    var formData = new FormData(form);
    xmlhttp.open("POST", form.action, false);
    xmlhttp.send(formData);
}

HTTP請求

curl“ http:// localhost:49345 / Staffing / SaveQuestion ”-H“Origin: http:// localhost:49345 ”-H“Accept-Encoding:gzip,deflate”-H“Accept-Language:en-US,en ; q = 0.8“-H”用戶代理:Mozilla / 5.0(Windows NT 6.3; WOW64)AppleWebKit / 537.36(KHTML,類似Gecko)Chrome / 49.0.2623.112 Safari / 537.36“-H”內容類型:multipart / form -data; boundary = ---- WebKitFormBoundaryU4mNITZXngk0WZ8C“-H”接受: / “ - H”Referer: http:// localhost:49345 / Staffing / Dashboard “-H”Connection:keep-alive“-H”DNT:1 “--data-binary”------ WebKitFormBoundaryU4mNITZXngk0WZ8C“^”Content-Disposition:form-data; name =“”QuestionID“”“^

“-1”^“------ WebKitFormBoundaryU4mNITZXngk0WZ8C”^“Content-Disposition:form-data; name =”“Question”“”^

“你還活着嗎?”^“------ WebKitFormBoundaryU4mNITZXngk0WZ8C”^“Content-Disposition:form-data; name =”“Type”“”^

“0”^“------ WebKitFormBoundaryU4mNITZXngk0WZ8C - ”^“” - 壓縮

我終於找到了解決方案,謝謝這篇文章! 提交表單時,模型為null

我的控制器是這樣的:

public ActionResult SaveQuestion(QuestionnaireViewModel question)

這顯然是一個問題(即使有不同的外殼):

public string Question { get; set; }

解決方案是這樣的:

public ActionResult SaveQuestion(QuestionnaireViewModel postQuestion)

基本上,被接受的對象的名稱不能與其中一個屬性相同,或者顯然MVC嚇壞了。

暫無
暫無

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

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