Come fare la validazione dei modelli Integer in asp.net mvc 2
-
30-09-2019 - |
Domanda
Ho un modulo di registrazione e l'utente deve inserire la metratura della loro casa. Vorrei che questo valore sia solo un numero intero. Esiste un modo per convalidare questo valore utilizzando attributi asp.net mvc?
Soluzione
Sì, lo è, ma si dovrà fare una versione piatta dell'oggetto si vogliono creare, perché la validazione con gli attributi viene eseguito solo DOPO MVC ha convertito i dati nel modello. che, quando il valore è un int, non riuscirà a convalidare se l'utente non è entrato un int, e si otterrà un messaggio di errore MVC al posto della vostra errormessage.
puoi pubblicare l'oggetto si vogliono fare?
con una versione piatta intendo tutti datetimes e interi sono punture nella versione piatta.
allora io uso questo:
[DisplayName("Square meters")]
[PosNumberNoZero(ErrorMessage = "need a positive number, bigger than 0")]
public string squaremeters { get; set; }
nello stesso file
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;
}
}
se il mio ModelState sia giusto, allora, io uso automapper di convertire il mio FlatModel nel mio modello, che è a soli 2 righe di codice.
modifica: se 0 è un numero valido:
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;
}
}
Altri suggerimenti
rendo conto che questo è già stato risposto, ma la risposta Stefanvds' è uneccessarily complicato. Basta usare MVC costruito nel attributi di validazione:
[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; }
Io di solito uso l'attributo gamma in questo modo:
int Positivo:
[Range(0,int.MaxValue)]
public int Id { get; set; }
int negativo:
[Range(int.MinValue,-1)]
public int Id { get; set; }
Qualsiasi int:
[Range(int.MinValue,int.MaxValue)]
public int Id { get; set; }
Bene usando Range
per un campo int
non funziona se si dispone di alcune lettere come "a".
Il Handler
errore non è chiamato (ASP.NET NUCLEO 1.0 RC2).