it-swarm.it

Qual è il modo migliore per aggiungere un validatore maggiore di 0 sul lato client usando MVC e annotazione dei dati?

Vorrei poter consentire l'invio di un modulo solo se il valore in un determinato campo è maggiore di 0. Ho pensato che forse l'attributo Intervallo Mvc mi avrebbe permesso di inserire solo 1 valore per indicare solo un maggiore di test, ma nessuna fortuna lì in quanto insiste sui valori minimo e massimo.

Qualche idea su come raggiungere questo obiettivo?

74
jaffa

Non è possibile memorizzare un numero maggiore di quello che potrebbe contenere il tipo di dati sottostante in modo che il fatto che l'attributo Range richieda un valore massimo sia un'ottima cosa. Ricordatelo non esiste nel mondo reale, quindi dovrebbe funzionare come segue:

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

Ho trovato questa risposta cercando di convalidare qualsiasi valore positivo per un float/double. Si scopre che questi tipi hanno una costante utile per "Epsilon"

Rappresenta il valore System.Double positivo più piccolo che è maggiore di zero.

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

Puoi creare il tuo validatore in questo modo:

    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;
    }
}

Quindi includi quel file nel tuo modello e usalo come un attributo come questo:

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

Di solito lo uso per la convalida a discesa.

3
John Lord