由于我未知的原因,我在控制器中的函数接收的数据始终为空。 我的数据正确地翻译成了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());
}
我试过了:
Object
,String
text
,application/json; charset=utf-8
仍然没有效果。任何人都可以建议我在哪里搜索错误?
更新: 将方法声明更改为:
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);
};
答案 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 :)。