6

Nehmen wir an, ich habe eine Person Klasse mit FirstName und LastName. Ich möchte, dass der Benutzer mindestens einen der beiden Werte in der Benutzeroberfläche eingeben muss, aber nicht jeden eingeben muss.Eine von zwei Eigenschaften wird vom Datenmodell benötigt

Wenn ich die Required Attribut/Daten Annotation auf jedem von ihnen platzieren, macht das beide von ihnen erforderlich.

Wie mache ich eine serverseitige Validierung (mit clientseitiger Validierung) für diese Regel?

+0

Ich weiß nicht, asp.net, aber wenn diese Arbeit als Lehre in PHP, sollten Sie ein Ereignis für PrePersist Daten auf die haben Datenbank. Sie sollten eine Bedingung für dieses Ereignis erstellen, die einen Fehler auslöst, wenn beide Werte null sind? –

Antwort

10

Sie könnten hierfür ein benutzerdefiniertes Attribut verwenden. Kurz gesagt, das benutzerdefinierte Attribut ruft beide Werte ab und stellt dann sicher, dass mindestens einer über einen Wert verfügt. Weitere Informationen finden Sie unter this page. Hier ist ein Beispiel (ungetestet Code):

[AttributeUsage(AttributeTargets.Property, AllowMultiple =false, Inherited = false)] 
    public class ValidatePersonName: ValidationAttribute 
    { 
    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     string FirstName = (string)validationContext.ObjectType.GetProperty("FirstName").GetValue(validationContext.ObjectInstance, null); 

     string LastName = (string)validationContext.ObjectType.GetProperty("LastName").GetValue(validationContext.ObjectInstance, null); 

    //check at least one has a value 
    if (string.IsNullOrEmpty(FirstName) && string.IsNullOrEmpty(LastName)) 
     return new ValidationResult("At least one is required!!"); 

     return ValidationResult.Success; 
    } 
    } 

Verbrauch:

class Person{ 

[ValidatePersonName] 
FirstName{get;set;} 

LastName{get;set;} 
} 
Verwandte Themen