【问题标题】:Issue sending json from JQuery to MVC Controller将 json 从 JQuery 发送到 MVC 控制器的问题
【发布时间】:2017-03-17 20:51:14
【问题描述】:

我正在将 Json 从 Jquery 发送到动作控制器,但由于某种原因,我的动作控制器中没有正确接收 Json 字符串中的第一个和最后一个元素,似乎正在添加一个花括号作为最后一个元素的值,当第一个元素是可空字段或者它是 int 时,第一个元素始终为空,其值为 0。 这是我的 JQuery 代码:

$(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...
    }

【问题讨论】:

  • 你不需要对任何东西进行字符串化,当然也不需要两次。只需使用data: $("#myForm").serialize())
  • @StephenMuecke 现在可以使用了,谢谢。如果您想将其发布为答案,您可以这样做,我会选择它作为答案:)

标签: javascript jquery json asp.net-mvc


【解决方案1】:

您可以使用序列化数据发送数据

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

这将使用默认的'application/x-www-form-urlencoded; charset=UTF-8' 作为contentType

如果您对数据进行字符串化,那么您还需要将contentType 设置为'application/json',,以便DefaultModelBinder 使用JsonValueProvider 来转换您的数据,在这种情况下,格式需要是

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

【讨论】:

    猜你喜欢
    • 2012-01-29
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多