事实证明,我认为这更难。我有一个ViewModel,我专门用于在网格中进行过滤。这是:
var GridFiltersViewModel = function () {
var self = this;
self.search = ko.observable();
self.sortColumn = ko.observable();
self.sortDirectionIsAscending = ko.observable(true);
self.page = ko.observable(1);
self.pageSize = ko.observable(10);
self.pageCount = ko.observable();
self.itemCount = ko.observable();
};
我遇到的问题是当我向我的操作方法发送此ViewModel的实例时,我收到错误:
值' null'对属性
无效
这是因为我的服务器端ViewModel属性不接受客户端ViewModel的null
和undefined
属性,即使我将它们设置为可为空也是如此。让服务器端ViewModel接受空属性的唯一方法是根本不发送它们。这是我的尝试:
var GridFiltersViewModel = function () {
// the properties from before
self.removeEmptyProperties = function () {
for (var property in self) {
if (self[property] === null || self[property] === undefined) {
delete self[property];
}
}
};
};
可以说,它不起作用。目前,当方法完成时,我最终会得到一个undefined
对象。在运行方法之前,我还尝试将淘汰赛ViewModel转换为JavaScript对象(使用ko.toJS()
),但我得到的结果相同。
我在这里做错了什么,我该怎么做?
答案 0 :(得分:1)
我只是构造一个新的JSON对象并返回它,而不是尝试一些异国情调,比如删除属性......这样的事情:
var GridFiltersViewModel = function () {
var self = this;
self.prop1 = ko.observable(null);
self.prop2 = ko.observable('Test');
self.prop3 = ko.observable(undefined);
self.definedProperties = ko.computed(function () {
var json = {};
json.props = "";
for (var property in self) {
if (self[property]() !== null && self[property]() !== undefined) {
json[property] = self[property]();
if (json.props !== "") {
json.props += ", ";
}
json.props += property;
}
}
return json;
});
};