2010-05-26 6 views
14

Ich habe eine [Bereich] Anmerkung, die wie folgt aussieht:Bereich Anmerkung zwischen nichts und 100?

[Range(0, 100)] 
public int AvailabilityGoal { get; set; } 

Meine Webseite sieht wie folgt aus:

<%=Html.TextBoxFor(u => u.Group.AvailabilityGoal)%> 

Es funktioniert wie soll ich nur Werte zwischen 0 und 100 eingeben kann aber Ich möchte auch, dass das Eingabefeld optional ist, der Benutzer sollte keinen Validierungsfehler erhalten, wenn das Eingabefeld leer ist. Dies hat nichts mit dem Bereich zu tun, sondern weil der Typ eine ganze Zahl ist. Wenn der Benutzer es leer lässt, sollte AvailabilityGoal = 0 sein, aber ich möchte den Benutzer nicht zwingen, eine Null einzugeben.

Ich versuchte dies aber es (natürlich) nicht funktioniert:

[Range(typeof(int?), null, "100")] 

Ist es möglich, dies mit Daten Anmerkungen oder auf andere Weise zu lösen?

Vielen Dank im Voraus.

Bobby

+0

Neuling auf Anmerkungen - wie wäre es nicht Null? > 0 oder <0, aber nicht Null – codeputer

Antwort

22

Sie sollten nicht die [Bereich] Attribut ändern müssen, wie [Bereich] und andere integrierte in DataAnnotations Validierer no-op, wenn ein leerer Wert angegeben. Machen Sie einfach die Eigenschaft selbst vom Typ int? statt int. Non-Nullable ValueType-Eigenschaften (wie int) werden immer automatisch benötigt.

+0

Das funktionierte so, wie ich es wollte, einfacher als ich dachte. Vielen Dank. – Bobby

5

Ich denke, man könnte das Range Objekt außer Kraft setzen und dieses Verhalten hinzuzufügen.

public class OptionalRange : RangeAttribute { 
    public override bool IsValid(object value) { 
     if (value == null || (int)value == 0) return true; 
     return base.IsValid(value); 
    } 
} 
+0

Wenn Sie die Bereichsvalidierung für einen nullbaren Int verwenden, der NICHT als erforderlich markiert ist, wird die Validierung im Browser weiterhin fehlschlagen, wenn Sie keinen Wert eingeben. Das Überschreiben des Attributs, wie Sie oben erwähnt haben, ändert dieses Verhalten nicht. Ich teste das mit MVC 5.2.3 auf einem Razor-Formular. – jrichview

Verwandte Themen