ASP.NET MVC 2で整数モデル検証を行う方法
-
30-09-2019 - |
質問
登録フォームがあり、ユーザーは自分の家の面積を入力する必要があります。この価値は整数にすぎないようにしたいと思います。属性ASP.NET MVCを使用してこの値を検証する方法はありますか?
解決
はい、そうですが、MVCがデータをモデルに変換した後にのみ属性が実行されるため、作成したいオブジェクトのフラットバージョンを作成する必要があります。これは、あなたの値がINTである場合、ユーザーがINTを入力しなかった場合に検証に失敗し、ERRORMESSAGEの代わりにMVCエラーメッセージが表示されます。
作りたいオブジェクトを投稿できますか?
フラットバージョンでは、すべてのデータタイムとINTがフラットバージョンのスティングであることを意味します。
それから私はこれを使用します:
[DisplayName("Square meters")]
[PosNumberNoZero(ErrorMessage = "need a positive number, bigger than 0")]
public string squaremeters { get; set; }
同じファイルで
public class PosNumberNoZeroAttribute : ValidationAttribute {
public override bool IsValid(object value) {
if (value == null) {
return true;
}
int getal;
if (int.TryParse(value.ToString(), out getal)) {
if (getal == 0)
return false;
if (getal > 0)
return true;
}
return false;
}
}
モデルステートが有効な場合、AutomApperを使用してFlatModelをモデルに変換します。これはわずか2行のコードです。
編集:0が有効な番号の場合:
public class PosNumberAttribute : ValidationAttribute {
public override bool IsValid(object value) {
if (value == null) {
return true;
}
int getal;
if (int.TryParse(value.ToString(), out getal)) {
if (getal >= 0)
return true;
}
return false;
}
}
他のヒント
これはすでに回答されていることを認識していますが、Stefanvdsの答えは秘密に複雑です。検証属性に組み込まれたMVCを使用するだけです。
[DisplayName("Square Feet")]
[Required(ErrorMessage = "Square Feet is Required")]
[Range(0, int.MaxValue, ErrorMessage = "Square Feet must be a positive number")]
public int SquareFeet { get; set; }
私は通常、次のような範囲属性を使用します:
ポジティブなINT:
[Range(0,int.MaxValue)]
public int Id { get; set; }
ネガティブINT:
[Range(int.MinValue,-1)]
public int Id { get; set; }
任意のint:
[Range(int.MinValue,int.MaxValue)]
public int Id { get; set; }
よく使っています Range
のために int
「A」のような文字がある場合、フィールドは機能しません。
エラー Handler
呼ばれていません(ASP.NET Core 1.0 RC2)。
所属していません StackOverflow