137 Stimmen

Was ist der beste Weg zum Hinzufügen einer größer als 0 Validator auf der Client-Seite mit MVC und Daten-Annotation?

Ich möchte in der Lage sein, nur ein Formular zu übermitteln, wenn der Wert in einem bestimmten Feld größer als 0 ist. Ich dachte, vielleicht das Mvc Range-Attribut würde mir erlauben, nur 1 Wert eingeben, um nur ein größer als Test zu bedeuten, aber kein Glück dort, wie es auf Minimum UND Maximum Werte besteht.

Haben Sie eine Idee, wie dies erreicht werden kann?

329voto

Darin Dimitrov Punkte 990883

Sie können keine Zahl speichern, die größer ist als der zugrundeliegende Datentyp, so dass die Tatsache, dass das Range-Attribut einen Maximalwert erfordert, eine sehr gute Sache ist. Denken Sie daran, dass gibt es in der realen Welt nicht, also sollte das Folgende funktionieren:

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

36voto

Phil Punkte 851

Ich fand diese Antwort auf der Suche nach einem positiven Wert für einen Float/Double zu validieren. Es stellte sich heraus, dass diese Typen eine nützliche Konstante für "Epsilon" haben

Stellt den kleinsten positiven System.Double-Wert dar, der größer als Null ist.

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

26voto

John Lord Punkte 1610

Sie können Ihren eigenen Validator wie folgt erstellen:

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

Fügen Sie diese Datei dann in Ihr Modell ein und verwenden Sie sie als Attribut wie folgt:

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

Ich verwende dies häufig bei der Validierung von Dropdowns. Beachten Sie, dass Sie die Fehlermeldung mit einem Parameter anpassen können, da es sich um eine Erweiterung des validationattribute handelt.

0voto

Greg Gum Punkte 29158

Der obige Validator arbeitet mit ganzen Zahlen. Ich habe dies erweitert, um mit einem Dezimalwert zu arbeiten:

    public class RequiredDecimalGreaterThanZero : 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
            decimal i;
            return value != null && decimal.TryParse(value.ToString(), out i) && i > 0;
        }
    }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X