2017-03-17 147 views
0

我从JQuery发送Json到一个Action Controller,但由于某种原因,Json字符串中的第一个和最后一个元素在我的操作控制器中没有正确接收,看起来好像一个大括号被添加作为值的最后一个元素,并且当是一个可为空场的第一个元素总是空,或者如果它是一个int其值为0 这是我的JQuery代码:从JQuery发送JSON到MVC控制器的问题

$(function() { 
     $("#myButton").click(function() { 
      var student= JSON.stringify($("#myForm").serialize()); 
alert(student); 
$.ajax({ 
       type: 'post', 
       url: $("#myForm").data("url"), 
       data: JSON.stringify({ 'policy': student}), 
       success: //more code.. 
}) 

我正在使用警报显示$("#myForm").serialize()的值,并且在警报执行时正在正确设置值。问题正在向动作控制器的方向发展。这是警告消息显示:

"first_field=7.5&aut_id=3456690&..........more info in here no 
problem..........&birthday=&last_field=" 

对于json string由动作控制器接收时,这是它获得:first_field= null(is a nullable field in my Model)last_field = "\\\"\"}"。它包含3个转义字符,所以我想,该值是接收= \""}

应该发生什么?被正确接收所有在中间的其他价值,这只是他的人在边缘

这是我的动作控制器:

 [HTTPPost] 
    public ActionResult EditStudent(Student student) 
    { 
    //some code... 
    } 
+1

你不需要任何字符串化,肯定不是两次。只需使用'data:$(“#myForm”)。serialize())' –

+0

@StephenMuecke它现在可以工作,谢谢。如果你想发布它作为答案,你可以做到这一点,我会选择它作为答案:) – AlexGH

回答

1

可以使用序列化的数据只发送数据

$.ajax({ 
    .... 
    data: $("#myForm").serialize(), 

如果字符串化的数据,将使用默认'application/x-www-form-urlencoded; charset=UTF-8'contentType

,那么你需要可以为S等的contentType'application/json',使得DefaultModelBinder使用JsonValueProvider到您的数据转换,而在这种情况下,格式必须

$.ajax({ 
    .... 
    data: JSON.stringify($("#myForm").serialize()), 
    contentType: 'application/json; charset=UTF-8',