MVC AJAX POST请求在Controller

时间:2016-04-23 16:11:33

标签: javascript ajax asp.net-mvc post

我试图找出为什么我的AJAX POST请求在到达控制器端时显示为null。我尝试了很多变化,但下面是我现在所拥有的。

现在我只是试图通过类型来获取问题,因此大多数模型都不需要,并且可以为null。

对我来说最奇怪的是,我不仅可以使用Chrome的调试工具看到数据是请求信息,而且非常类似的方法正在运行(尽管模型中没有列表。此外,还有其他方面该网站使用该模型提交,并且有效。

此外,它不只是AJAX,我尝试过只做常规提交,而且它做同样的事情。

下面我相信是感兴趣的一切。如果需要别的东西,请告诉我。

聊天更新:

类型QuestionType是枚举,值0-2对它有效。

我尝试过使用jQuery,包括使用here显示的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请求

  

卷曲“http://localhost:49345/Staffing/SaveQuestion” - H“来源:http://localhost:49345” - H“接受编码:gzip,收缩”-H“接受语言:en-US,en; q = 0.8” -H“User-Agent: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”连接:keep-alive“-H”DNT:1“ - 数据-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 - ” ^   “” - 压缩

1 个答案:

答案 0 :(得分:1)

我终于找到了解决方案,谢谢这篇文章! Model is null when form submitted

我的控制器是这样的:

public ActionResult SaveQuestion(QuestionnaireViewModel question)

由于这个问题显然是一个问题(即使使用不同的外壳):

public string Question { get; set; }

解决方案是:

public ActionResult SaveQuestion(QuestionnaireViewModel postQuestion)

基本上,被接受的对象的名称不能与其中一个属性相同,或者显然MVC吓坏了。