2016-04-23 119 views
3

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

现在我只是试图得到类型的问题,所以大多数模型是不需要的,可以为空。

对我来说最奇怪的是,我不仅可以使用Chrome的调试工具看到数据是请求信息,而且还有一种非常类似的方法正在工作(尽管该模型没有列表。该网站的区域,我已经使用该模型提交,和它的作品。

而且,它不只是AJAX,我已经试过只是做了常规的提交,并做同样的事情。

下面我相信是一切有趣的东西。让我知道是否需要别的东西。

来自聊天的更新:

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

我试过使用jQuery,包括使用显示的序列化()方法here。这没有做什么。

我已经确认要发送的内容,它是第一个使用正常提交的,第二个使用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“的Accept-Encoding : gzip,deflate“-H”Accept-Language: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; border = ---- WebKitFormBoundaryU4mNITZXngk0WZ8C“-H”Accept:/“-H”Referer:http://localhost:49345/Staffing/Dashboard“-H”Connection:keep-alive“-H”DNT:1“--data-binary”---- --WebKitFormBoundaryU4mNITZXngk0WZ8C“^ ”Content-Disposition:form-data;名称= “” QuestionID “” “^

”-1“^ ”------ WebKitFormBoundaryU4mNITZXngk0WZ8C“^ ” 内容处置:形状数据; NAME = “” 问 “” “^

”你还活着吗?“^ ”------ WebKitFormBoundaryU4mNITZXngk0WZ8C“^ ” 内容处置:表格数据; NAME = “” 类型 “”“^

”0“^ ”------ WebKitFormBoundaryU4mNITZXngk0WZ8C - “^ ”“ --compressed

+0

谁在调用submitQuestion函数。 –

+0

与自身不同的页面。相同的页面调用其他类似的页面。 – David

+0

好的。从开发人员工具中获取的请求正文是什么? –

回答

1

我终于找到了解决方案感谢这个!张贴Model is null when form submitted

我的控制器是这样的:

public ActionResult SaveQuestion(QuestionnaireViewModel question) 

这显然是因为这个(即使有不同的外壳)一个问题:

public string Question { get; set; } 

的溶液是这样的:

public ActionResult SaveQuestion(QuestionnaireViewModel postQuestion) 

基本上,被接受的对象的名称不能是相同的名称的属性之一,或明显MVC怪胎。

+1

铁杆。我希望至少有一个例外,如“无法通过模型绑定器绑定,因为名称不明确......” –