23

登録フォームがあり、ユーザーは家の面積を入力する必要があります。この値は整数のみにしたいと思います。属性asp.net mvcを使用してこの値を検証する方法はありますか?

4

4 に答える 4

72

これはすでに答えられていることを理解してください、しかし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; }
于 2011-09-13T11:06:48.777 に答える
27

はい、そうですが、作成したいオブジェクトのフラット バージョンを作成する必要があります。これは、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;

    }
}

モデル状態が有効な場合、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;
    }
}
于 2010-08-23T14:12:37.263 に答える
10

私は通常、次のように 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; }
于 2016-01-11T04:26:38.757 に答える