json发送空数据

时间:2014-01-21 08:30:52

标签: ajax asp.net-mvc json knockout.js

由于我未知的原因,我在控制器中的函数接收的数据始终为空。 我的数据正确地翻译成了json。数据已发送但未收到(发送成功结束)。

这里你可以看到我的Ajax功能

$.ajax({
    url: "/Devices/Read",
    contentType: "text",
    type: "POST",
    datatype: "json",
    data: ko.toJSON(self),
    error: function (xmlHttpRequest, errorText, thrownError) {
        console.log("error")
    },
    success: function (data) {
        if (data != null) {
            console.log("success");
        }
    }
});

这里是我在控制器中的功能:

[HttpPost]
public ActionResult Read(string data)
{
    return Json(new Object());
}

我试过了:

  1. 将参数类型更改为:ObjectString
  2. 将contentType更改为:textapplication/json; charset=utf-8
  3. 仍然没有效果。任何人都可以建议我在哪里搜索错误?

    更新: 将方法声明更改为:

    public ActionResult Read(object[] data, string DeviceUser, string DeviceId, string number)

    最后三个字符串正常,但第一个对象由适当数量的元素组成,但它们为空。 在JS中,他们是类数组中的快餐

    我的JS对象的结构:

      var Eq = function (name, price) {
        var self = this;
        self.DeviceSerialNumber = ko.observable();
        self.Batch = ko.observable();
    
    };
    var ViewModel = function () {
        var self = this;
        self.data = ko.observableArray([]);
        self.DeviceUser = ko.observable();
        self.DeviceId = ko.observable();
        self.number = ko.observable(1);
    };
    

3 个答案:

答案 0 :(得分:1)

在你的控制器动作中,你为什么这样做:

return RedirectToAction("Index"); 

我想你可能想:

return Json(data);

答案 1 :(得分:1)

如果您正在编写HTTP Post方法,那么重定向到操作实际上没有意义,因为您正在发布数据,而不是请求页面。 你可以这样做:

[HttpPost]
public ActionResult Read(string Data)
{
    return Json(Data);
}

答案 2 :(得分:1)

确定问题是在方法中设置正确的参数类型。

要解决我的问题,我需要将方法声明修改为:

public ActionResult Read(ViewModel m)

并像这样添加ViewModel:

  public class ViewModel
{
    public List<InnerClass> data { get; set; }
    public string DeviceUser  {get;set;}
    public string DeviceId {get;set;}
    public int number {get;set;}

}
public class InnerClass
{
    public string DeviceSerialNumber { get; set; }
    public string Batch { get; set; }
}

现在收到所有数据。

谢谢大家的帮助和建议。我会给你所有+1 :)。