私は登録フォームを持っており、ユーザーは自分の家の平方フィートを入力する必要があります。この値は整数のみにしてください。属性asp.net mvcを使用してこの値を検証する方法はありますか?
はい、そうですが、MVCがデータをモデルに変換した後でのみ属性を使用した検証が実行されるため、作成するオブジェクトのフラットバージョンを作成する必要があります。これは、値がintの場合、ユーザーがintを入力しなかったかどうかの検証に失敗し、エラーメッセージではなくMVCエラーメッセージが表示されます。
作成したいオブジェクトを投稿できますか?
フラットバージョンでは、すべての日時と整数がフラットバージョンの文字列です。
それから私はこれを使います:
[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;
}
}
私のmodelstateが有効な場合、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; }
私は通常、次のようにrange属性を使用します。
正の整数:
[Range(0,int.MaxValue)]
public int Id { get; set; }
負の整数:
[Range(int.MinValue,-1)]
public int Id { get; set; }
任意の整数:
[Range(int.MinValue,int.MaxValue)]
public int Id { get; set; }