2013-03-16 2 views
1

Если модель использует NULLABLE значения, такие какBreezeJS + Нокаут не в состоянии установить поле ввода в Null

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

При добавлении новых записей все в порядке, цена не обязательное поле так будет сохранен в качестве значения Null в базе данных.

Если я изменяю существующую запись, допустим, я хочу изменить значение цены от 10 до пустого. Затем я получаю ошибку проверки.

Ошибка проверки: «Цена» должно быть целым числом между значениями -2147483648 и 2147483647

Однако это поле не требуется, так что я бы ожидал, что это просто сохранить нулевое значение?

ответ

4

Это происходит потому, что пустое значение текстового поля является «» (пустая строка), но не нулевой.

Итак, перед установкой нового значения вы должны проверить, является ли значение пустой строкой, если это так - назначьте нуль вручную.


Обновление для нокаута. Вы можете написать пользовательское привязку ко, которое сделает все для вас. Вот пример (может быть не самой лучшим):

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

Извините, что я обновил вопрос, чтобы сделать его более понятным, я использую нокаут и MVVM, поэтому я не пишу никакого кода для обновления значения, я считаю, что проблема кроется в библиотеке BreezeJS. –

+2

Хотя вы, безусловно, можете написать пользовательскую привязку, мы не думаем, что вам нужно это обычное дело. Мы улучшим нашу логику DataType.Parse, чтобы справиться с этим должным образом; не могу сказать, как скоро ... но скоро. – Ward

Смежные вопросы