データ検証でちょっとはまったお話し
最近、DataAnnotationsのRange属性を使ったデータ検証でちょっとはまったことがありました。
0から1までの数値を入力してもらうために以下の様にRange属性を指定しました。
どちらもRange属性で0から1の間の数値を指定するようにしています。
結果は見ての通り、int型の場合はエラーメッセージが表示されていません。
考えてみれば当たり前なのですが、地味に解りにくいので気が付くのにちょっと時間がかかりました。
[Range(0, 1, ErrorMessage="0~1の間の数値を入力してください。")] public double Value1 { // 省略 }値を入力してみたところ範囲外の数値なのにエラーメッセージが表示されないことがありました。 (具体的には-0.5とか1.3とかを入力してもエラーメッセージが表示されませんでした。) 何が問題だったのかというとRangeの入力範囲をint型で指定したことが原因でした。 範囲をint型で指定したため、データ検証もint型で行われていました。 そのためdouble型の値がint型にキャストされ、小数点以下が切り捨てられた状態で検証を行っていたので1.3等の一部の数値でエラーなしと判断されていました。 double型のプロパティに対してint型で範囲指定したものとdouble型で範囲指定したものを比較してみました。

スポンサーサイト