1

モデルが次のようなnull許容値を使用する場合

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

新しいレコードを追加する場合はすべて問題ありませんが、Priceは必須フィールドではないため、データベースにNull値として保存されます。

既存のレコードを変更する場合、価格の値を10から空白に変更するとします。次に、検証エラーが発生します。

検証エラー:「価格」は、-2147483648と2147483647の値の間の整数である必要があります

ただし、このフィールドは必須ではないので、null値を保存するだけだと思いますか?

4

1 に答える 1

4

これは、空のテキスト ボックスの値が"" (空の文字列) であるが、nullではないために発生します。

そのため、新しい値を設定する前に、値が空の文字列かどうかを確認する必要があります。空の場合は、nullを手動で割り当てます。


ノックアウトの更新。カスタムの 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" />

それが役に立てば幸い。

于 2013-03-17T19:34:52.717 に答える