2013-03-16 56 views
1

当一个模型使用空的值,如BreezeJS +淘汰赛不能设置输入字段设置为null

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

当添加新记录一切都很好,价格也不是必填字段,以便将被保存为空值在数据库中。

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

验证错误:“价格”必须是-2147483648值之间的整数2147483647

然而,这并不是必填栏,所以我本来期望它只是保存一个空值?

回答

4

发生这种情况是因为空文本框的值为“”(空字符串),但不是null

因此,在设置新值之前,您应该检查值是否为空字符串,如果是这样 - 手动分配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" /> 

希望它能帮助。

+0

对不起,我已经更新了它使问题更清楚的问题,我使用了knockout和MVVM,所以我不写任何代码来更新值,我相信问题在于BreezeJS库。 – 2013-03-21 08:16:30

+2

虽然你当然可以写一个自定义绑定,但我们认为你不应该为这个常见的情况。我们将改进我们的DataType.Parse逻辑来正确处理这个问题;不能说多快......但很快。 – Ward 2013-03-22 06:43:24