2013-03-16 99 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