【发布时间】:2014-11-17 23:40:46
【问题描述】:
好的。我遇到了一个我无法理解的问题。
首先,我尝试将几个 ko.observableArrays 作为 JSON 发布到控制器并分别对它们进行模型绑定。当我只发布一个并且不在 .ajax 的数据属性中命名它时,它发布得很好并且模型绑定完美无缺。
这是我的 viewModel 中的一个 sn-p,也是我尝试发布两个 JSON 对象的方式。
self.timeRanges = ko.observableArray();
self.geoRequirements = ko.observableArray();
self.saveWorkWish = function() {
$.ajax({
url: "@Url.Action("SaveWorkWish")",
type: "POST",
contentType: 'application/json; charset=utf-8',
data: {
timeRanges: ko.toJSON(self.timeRanges()),
geoRequirements: ko.toJSON(self.geoRequirements())
},
complete: function (data) {
console.log(data);
}
});
};
我的行动
public JsonResult SaveWorkWish(IList<JSONTimeRanges> timeRanges, IList<JSONGeoRequirements> geoRequirements)
{
// do stuff
}
我得到了这个例外: 无效的 JSON 原语:timeRanges。
有趣的是,当我这样做时:
$.ajax({
url: "@Url.Action("SaveWorkWish")",
type: "POST",
contentType: 'application/json; charset=utf-8',
data: ko.toJSON(self.timeRanges()),
complete: function (data) {
console.log(data);
}
});
和
public JsonResult SaveWorkWish(IList<JSONTimeRanges> timeRanges)
{
// do stuff
}
效果很好。
最后我注意到的一件事,很可能是错误的原因是:
当我在示例中发布 2 个 Json 时, 这就是 chrome 告诉我我发布的内容: timeRanges=%5B%7B%22startDate%22%3A%2214-09-2014%22%2C%22endDate%22%3A%2220-09-2014%22%2C.....等..
在工作示例中:
它是一个格式良好且可读的 JSON 对象。
所以看起来错误确实是正确的,并且我没有向控制器发送有效的 JSON。
但是..我做错了什么?
【问题讨论】:
标签: c# asp.net-mvc json knockout.js model-binding