【发布时间】:2014-06-06 05:11:57
【问题描述】:
我有一个淘汰模型,我正试图发布到 MVC4 控制器。简化版如下所示:
var ItemModel = function (id, name) {
var self = this;
self.id = ko.observable(id);
self.name = ko.observable(name);
};
var Entry = function () {
var self = this;
self.Id = ko.observable();
self.areas = ko.observableArray([]);
};
var EntryModel = function () {
var self = this;
self.entry = new Entry();
self.save = function () {
$.post("/Edit", ko.toJS(self.entry), function (data) {
...
})};
};
};
如果我在模型中添加两个区域,如下所示:
viewModel.entry.areas.push(new ItemModel(1, "A"));
viewModel.entry.areas.push(new ItemModel(2, "B"));
并使用viewModel.save 发布它我从模型活页夹中获得了两个区域,但其中没有数据(即 id = 0,name = "")。
经过一些研究,我发现我正在发布这样的数据:
id = 1
name = test
area[0][id] = 1
area[0][name] = "A"
area[1][id] = 2
area[1][name] = "B"
而 MVC 期望这样:
id = 1
name = test
area[0].id = 1
area[0].name = "A"
area[1].id = 2
area[1].name = "B"
如何按预期发布此内容?
【问题讨论】:
-
如何将数据发送到服务器? jQuery AJAX? xmlhttp请求?你能显示那个代码吗?
-
我认为您可能错误地发布了数组,我看到您正在使用 jquery 发布。看看这个帖子的答案:stackoverflow.com/questions/12572856/…。尝试使用设置了 dataType 和 contentType 的 jquery $.ajax 函数发布数据。也尝试将选项传统设置为 true。
-
@PatrickSteele,发布代码在 EntryModel 的保存功能中。
-
@MyP3uK,谢谢。您指出我要修复帖子的问题。我仍在尝试了解为什么我的数据会按原样被序列化(也许是 ko.ToJS?),以及是否有办法让它正常工作。
-
尝试在 $.post 之前添加一个“alert(ko.toJSON(self.entry))”。这将让您验证您实际上有正确的数据要发送。您是否使用 Chrome 开发者工具或 Fiddler 之类的工具查看了通过网络传输的数据?