【问题标题】:post json string to mvc action via ajax comes null通过ajax将json字符串发布到mvc动作为null
【发布时间】:2015-10-07 07:02:11
【问题描述】:

我正在通过 ajax 发布一个 json 对象

    $('#btnOrder').click(function (e) {
        var jsonData = 
    {
        ScheduleDate: '20/07/2015 17:00',
        UnitNumber: '425196',
        Length: 0.00
    }

        var url = "http://mywebsite.com/Home/MakeOrder";
        $.ajax({
            type: "POST",
            dataType: "json",
            url: url,
            data: JSON.stringify(jsonData),
            contentType: "application/json",
            success: function(result) {

            }
        });
    });

执行以下操作:

[HttpPost]
public PartialViewResult MakeOrder(string jsonData)
{
    // some actions

    return this.PartialView("_Summary", summaryModel);
}

型号:

public class OrderItem
 {
        public DateTime? ScheduleDate {get;set;}
        public string UnitNumber {get;set;}
        public float Length {get;set;}
    }

jsonData 参数值总是为空。

当我把它变成通过 ajax 调用时

var url = "http://mywebsite.com/Home/MakeOrder/?jsonData=" + jsonData

那么参数就可以作为json字符串了。

我需要邮寄。

编辑 ***** JS 值

我在 Chrome 中调试,jsonData 传递给 'ajax data:' 是

JSON.stringify(jsonData)

给予

jsonData={"ScheduleDateTime":"20/07/2015 17:00","UnitNumber":"425196","Length":0.00}

如果通过非字符串化是:

jsonData = Object {"ScheduleDateTime":"20/07/2015 17:00","UnitNumber":"425196","Length":0.00}

【问题讨论】:

  • 您是否尝试过一些简单的方法,例如更改要传递的数据元素:{jsonData: JSON.stringify(jsonData)},看看它是否正常工作?您是否还检查过浏览器工具以查看实际发送回浏览器的内容(使用 fiddler 或浏览器的网络跟踪?)
  • @David 我正在 Chrome 中调试 - 请参阅上面的编辑了解我得到的值
  • 那么尝试按照我的建议传递数据是否可行?
  • @David 不,它不起作用。实际上从这里没有解决方案。奇怪的是,我从互联网上获取了 2 个示例,并完全按照我的应用程序中的方式应用它们,但它们也不起作用。在动作控制器中获取 Request.Form 值对我也不起作用。一切都是空的。尽管我的同事在他的本地版本中做了我正在做的事情并且对他有用。所以一定有其他东西影响我的代码,否则它就是不喜欢我哈哈。无论如何,我得到了我同事的工作版本,所以问题解决了。谢谢大家
  • 很高兴你最终找到了一个可行的解决方案。如果是我,我真的不知道是什么导致了这个问题,所以我需要找出问题所在。正如我所说,很高兴你设法在其他地方找到了解决方案。

标签: ajax json asp.net-mvc post controller-action


【解决方案1】:

Similar SO question that will solve your issue

您可能需要创建一个模型来接受列表而不是字符串列表。

public class MyJSONObject{

    public DateTime ScheduleDate { get; set; }

    public string UnitNumber { get; set; }

    public double Length { get; set; }

}

并在您的控制器中接受它,例如:

[HttpPost]
public PartialViewResult MakeOrder(List<MyJSONObject> jsonData)
{
    // some actions
    return PartialView("_Summary", summaryModel);
}

如果它不是您需要的列表,则只需发送单个对象并在您的控制器中以MyJSONObject jsonData 的形式接受它。

【讨论】:

  • 更新了我的答案。只是快速谷歌。下次请尽量描述您的反馈。
  • 是的,我尝试将实际对象传递给操作,在我的情况下是 OrderItem(请参阅上面的编辑)。在这种情况下,对象会执行操作,但其属性不会被绑定(它们为 null 或 0 或为空,取决于类型)。 @JDupont
  • 在解决方案中,您要链接的数组被传递给动作,而不是 json 字符串
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-17
  • 2014-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多