Frage

habe ich ein Anmeldeformular und der Benutzer muss die Quadratmeterzahl des Hauses ein. Ich würde dieser Wert mag nur eine ganze Zahl sein. Gibt es eine Möglichkeit, diesen Wert zu validieren Attribute asp.net Mvc?

mit
War es hilfreich?

Lösung

Ja, es ist, aber Sie werden eine flache Version des Objekts vornehmen müssen Sie erstellen wollen, weil die Validierung mit Attributen läuft nur AFTER MVC Ihre Daten in das Modell umgewandelt. das, wenn Ihr Wert ist ein int, wird Validate fehlschlagen, wenn der Benutzer nicht ein int eingeben, und Sie werden eine MVC Fehlermeldung anstelle Ihrer Fehlernachricht erhalten.

können Sie das Objekt erstellen Sie wollen machen?

mit einer flachen Version meine ich alle Datetimes und ints sind Stiche in der flachen Version.

Dann benutze ich diese:

    [DisplayName("Square meters")]
    [PosNumberNoZero(ErrorMessage = "need a positive number, bigger than 0")]
    public string squaremeters { get; set; }

in der gleichen Datei

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;

    }
}

, wenn mein Model gültig ist dann, ich benutze AutoMapper meinen FlatModel in mein Modell zu umwandeln, die nur zwei Zeilen Code.

edit: wenn 0 eine gültige Zahl:

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

Andere Tipps

Realize dies bereits beantwortet worden, aber Stefanvds' Antwort ist uneccessarily kompliziert. Nur MVCs in Validierungs Attribute gebaut verwenden:

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

Normalerweise verwende ich den Bereich Attribut wie folgt aus:

Positive int:

[Range(0,int.MaxValue)]
public int Id { get; set; }

Negative int:

[Range(int.MinValue,-1)]
public int Id { get; set; }

Alle int:

[Range(int.MinValue,int.MaxValue)]
public int Id { get; set; }

Nun mit Range für ein int Feld wird nicht funktionieren, wenn Sie einige Buchstaben wie „a“ haben.
Der Fehler ist nicht Handler (ASP.NET CORE 1.0 RC2) genannt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top