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?

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top