質問

登録フォームがあり、ユーザーは自分の家の面積を入力する必要があります。この価値は整数にすぎないようにしたいと思います。属性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)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top