BreezeJS + Knockout无法将输入字段设置为Null

时间:2013-03-16 21:41:49

标签: knockout.js breeze

模型使用可以为空的值,例如

public Nullable<int> Price { get; set; }

添加新记录时,一切正常,Price不是必填字段,因此将在数据库中保存为Null值。

如果我修改现有记录,假设我想将价格值从10更改为空白。然后我收到验证错误。

验证错误:'价格'必须是-2147483648和2147483647之间的整数

但是这个字段不是必需的,所以我希望它只保存一个空值?

1 个答案:

答案 0 :(得分:4)

这是因为空文本框值为“”(空字符串),但不是 null

因此,在设置新值之前,您应检查value是否为空字符串,如果是,请手动分配 null


Knockout更新。 您可以编写自定义ko绑定,它将为您完成所有操作。 这是一个例子(可能不是最好的一个):

<强>使用Javascript:

ko.bindingHandlers.nullableValue = {
  init: function (element, valueAccessor, allBindingsAccessor) {
    var underlyingObservable = valueAccessor();
    var interceptor = ko.dependentObservable({
        read: underlyingObservable,
        write: function (value) {
            if (value == '') {
                underlyingObservable(null);
                return;
            }
            underlyingObservable(value);
        }
    });
    ko.bindingHandlers.value.init(element, function () { return interceptor; }, allBindingsAccessor);
  },
  update: ko.bindingHandlers.value.update
};

Html

<input type="text" data-bind="nullableValue: myNullableProperty" />

希望它有所帮助。