fc2ブログ

データ検証でちょっとはまったお話し

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

 考えてみれば当たり前なのですが、地味に解りにくいので気が付くのにちょっと時間がかかりました。
スポンサーサイト



テーマ : プログラミング
ジャンル : コンピュータ

カレンダー
03 | 2016/04 | 05
- - - - - 1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
全記事表示リンク

全ての記事を表示する

カテゴリ
タグリスト

月別アーカイブ
04  10  11  09  08  07  06  05  04  03  02  01  12  11  10  09  08  07  06  04  03  02  01  12  11  10  09  08  07  06  05  04  03  02  01  12  11  10  09 
最新記事
リンク
最新コメント
検索フォーム
Amazon