web-dev-qa-db-ja.com

MVCとデータ注釈を使用してクライアント側に0より大きいバリデーターを追加する最良の方法は何ですか?

特定のフィールドの値が0より大きい場合にのみ、フォームの送信を許可できるようにしたいと思います。MvcRange属性では、テストよりも大きいことを示すために1つの値のみを入力できると考えましたが、最小値と最大値を主張しているので、運はありません。

どのようにこれを達成することができますか?

74
jaffa

基になるデータ型が保持できる数より大きな数値を格納することはできません。そのため、Range属性に最大値が必要であるという事実は非常に良いことです。 は実世界には存在しないため、次のように動作します。

[Range(1, int.MaxValue, ErrorMessage = "Please enter a value bigger than {1}")]
public int Value { get; set; }
201
Darin Dimitrov

この答えは、float/doubleの正の値を検証しようとしています。これらのタイプには、「Epsilon」に役立つ定数があることがわかります

ゼロより大きい正の最小の正のSystem.Double値を表します。

    [Required]
    [Range(double.Epsilon, double.MaxValue)]
    public double Length { get; set; }
8
Phil

次のような独自のバリデータを作成できます。

    public class RequiredGreaterThanZero : ValidationAttribute
{
    /// <summary>
    /// Designed for dropdowns to ensure that a selection is valid and not the dummy "SELECT" entry
    /// </summary>
    /// <param name="value">The integer value of the selection</param>
    /// <returns>True if value is greater than zero</returns>
    public override bool IsValid(object value)
    {
        // return true if value is a non-null number > 0, otherwise return false
        int i;
        return value != null && int.TryParse(value.ToString(), out i) && i > 0;
    }
}

次に、そのファイルをモデルに含め、次のような属性として使用します。

    [RequiredGreaterThanZero]
    [DisplayName("Driver")]
    public int DriverID { get; set; }

私はこれをドロップダウン検証でよく使用します。

3
John Lord