2010-02-25 16 views
12

Ich verwende ASP.NET MVC2 und versuche, meine Ansichtsmodelle mit den Attributen im Namespace System.ComponentModel.DataAnnotations zu validieren.Dynamische Bereichsüberprüfung in ASP.NET MVC 2

Wie kann ich den erlaubten gültigen Bereich eines RangeAttribute dynamisch festlegen? Zum Beispiel, wenn ich validieren möchte, dass ein eingegebenes Datum innerhalb eines erwarteten Bereichs liegt.

kompilieren Dies gilt nicht:

[Range(typeof(DateTime), 
     DateTime.Today.ToShortDateString(), 
     DateTime.Today.AddYears(1).ToShortDateString())] 
    public DateTime DeliveryDate { get; set; } 

, weil „ein Attribut Argument ein konstanter Ausdruck, typeof Ausdruck oder Array-Erstellungsausdruck eines Attributs Parametertyp sein muss“.

Muss ich meinen eigenen benutzerdefinierten Validator erstellen?

Antwort

15

OK, die Antwort gefunden. .NET Framework 4 bietet eine neue CustomValidationAttribute, die das macht Folgendes möglich:

[Required] 
[DisplayName("Ideal Delivery Date")] 
[CustomValidation(typeof(HeaderViewModel), "ValidateDeliveryDate")] 
public DateTime DeliveryDate { get; set; } 

public static ValidationResult ValidateDeliveryDate(DateTime deliveryDateToValidate) 
{ 
    if (deliveryDateToValidate.Date < DateTime.Today) 
    { 
    return new ValidationResult("Delivery Date cannot be in the past."); 
    } 

    if (deliveryDateToValidate.Date > DateTime.Today.AddYears(1)) 
    { 
    return new ValidationResult("Delivery Date must be within the next year."); 
    } 

    return ValidationResult.Success; 
} 

http://msdn.microsoft.com/en-us/library/system.componentmodel.dataannotations.customvalidationattribute%28VS.100%29.aspx

+0

Auf jeden Fall zu überprüfen, ob ich zwei Eigenschaften Datumsart haben wie Start- und Enddatum und stellen Sie sicher, dass Start nicht nach Ende ist mit ein solches Schema (benutzerdefinierte Prüfklasse, Attribute)? – TheVillageIdiot

0

Sie müssen Ihr eigenes Attribut erstellen oder ein auf Nicht-Attributen basierendes Validierungs-Framework verwenden. Wie die Nachricht sagt, müssen alle Parameter zu jedem Attribut konstante Werte sein.