J'aimerais pouvoir autoriser l'envoi d'un formulaire uniquement si la valeur d'un champ donné est supérieure à 0. Je pensais que l'attribut Mvc Range me permettrait peut-être de ne saisir qu'une valeur pour signifier uniquement un test supérieur à test, mais pas de chance car il insiste sur les valeurs Minimum ET Maximum.
Des idées comment cela peut être réalisé?
Vous ne pouvez pas stocker un nombre plus grand que ce que votre type de données sous-jacent pourrait contenir. Par conséquent, le fait que l'attribut Range nécessite une valeur max est une très bonne chose. Rappelez-vous que ∞
n’existe pas dans le monde réel, les éléments suivants devraient donc fonctionner:
[Range(1, int.MaxValue, ErrorMessage = "Please enter a value bigger than {1}")]
public int Value { get; set; }
J'ai trouvé cette réponse cherchant à valider toute valeur positive pour un float/double. Il s'avère que ces types ont une constante utile pour 'Epsilon'
Représente la plus petite valeur positive System.Double supérieure à zéro.
[Required]
[Range(double.Epsilon, double.MaxValue)]
public double Length { get; set; }
Vous pouvez créer votre propre validateur comme ceci:
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;
}
}
Ensuite, incluez ce fichier dans votre modèle et utilisez-le comme un attribut comme celui-ci:
[RequiredGreaterThanZero]
[DisplayName("Driver")]
public int DriverID { get; set; }
Je l'utilise couramment lors de la validation par liste déroulante.