特定のフィールドの値が0より大きい場合にのみフォームの送信を許可できるようにしたいのですが、Mvc範囲属性では1つだけの値を入力して、より大のテストのみを示すことができると思いましたが、最小値と最大値を主張しているので、運はありません。
これをどのように達成できるかについてのアイデアはありますか?
回答:
基になるデータ型が保持できる数よりも大きな数を格納することはできないため、Range属性に最大値が必要であるという事実は非常に良いことです。∞
これは実世界には存在しないので、次のように機能することを覚えておいてください。
[Range(1, int.MaxValue, ErrorMessage = "Please enter a value bigger than {1}")]
public int Value { get; set; }
この回答は、float / doubleの正の値を検証するためのものです。これらの型には「イプシロン」に役立つ定数があることがわかります
ゼロより大きい正の最小のSystem.Double値を表します。
[Required]
[Range(double.Epsilon, double.MaxValue)]
public double Length { get; set; }
次のように独自のバリデーターを作成できます。
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; }
私は通常、これをドロップダウン検証で使用します。validationattributeを拡張しているため、パラメーターを使用してエラーメッセージをカスタマイズできます。
Please enter a value less than or equal to 2147483647
。