2016-07-01 9 views
0

ich ein kleines Problem haben, hier ist mein Code:für Datum und Uhrzeit erforderlich (18 Jahre)

public partial class Tourist 
    { 

     public Tourist() 
     { 
      Reserve = new HashSet<Reserve>(); 
     } 
     public int touristID { get; set; } 

     [Required] 
     [StringLength(50)] 
     public string touristNAME { get; set; } 

     public DateTime touristBIRTHDAY { get; set; } 

     [Required] 
     [StringLength(50)] 
     public string touristEMAIL { get; set; } 

     public int touristPHONE { get; set; } 

     public virtual ICollection<Reserve> Reserve { get; set; } 
    } 
} 

Wie kann ich touristBIRTHDAY einschränken 18 Jahre alt sein? Ich denke, dass ich diese Funktion verwenden muss, aber ich weiß nicht, wo ich es setzen soll: Hinweis: Diese Funktion ist ein Beispiel.

DateTime bday = DateTime.Parse(dob_main.Text); 
DateTime today = DateTime.Today; 
int age = today.Year - bday.Year; 
if(age < 18) 
{ 
    MessageBox.Show("Invalid Birth Day"); 
} 

Dank;)

UPDATE: folge ich der Lösung von Berkay Yaylaci, aber ich bin eine Nullreferenceexception bekommen. Es scheint, dass mein Wert Parameter ist Standard, und dann meine Methode nicht, warum? Was ist die Lösung dafür?

Antwort

4

Sie können Ihre eigene Validierung schreiben. Erstellen Sie zuerst eine Klasse.

rief ich MinAge.cs

public class MinAge : ValidationAttribute 
    { 
     private int _Limit; 
     public MinAge(int Limit) { // The constructor which we use in modal. 
      this._Limit = Limit; 
     } 
     protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
     { 
       DateTime bday = DateTime.Parse(value.ToString()); 
       DateTime today = DateTime.Today; 
       int age = today.Year - bday.Year; 
       if (bday > today.AddYears(-age)) 
       { 
        age--; 
       } 
       if (age < _Limit) 
       { 
        var result = new ValidationResult("Sorry you are not old enough"); 
        return result; 
       } 


      return null; 

     } 
    } 

SampleModal.cs

[MinAge(18)] // 18 is the parameter of constructor. 
public DateTime UserBirthDate { get; set; } 

IsValid nach Post läuft und die Grenze überprüfen. Wenn das Alter nicht größer ist als die Grenze (die wir in modal gab!) Als Rückkehr Validation

Hoffnung hilft,

+0

Dank! Ich habe getan, was du sagst, aber etwas funktioniert nicht sehr gut. Zum Beispiel, ich erstelle eine Tourist 1, wo Geburtstag war: 05.10.1990, und es funktioniert sehr gut. Dann versuche ich einen Tourist 2 zu erstellen, wo Geburtstag ist 22.12.1994, sollte es gut funktionieren, aber stattdessen auf eine "NullReferenceException wurde von Benutzercode nicht behandelt". Warum? Hinweis: Die NullReferenceException erscheint bei "DateTime bday = DateTime.Parse (value.ToString());" – ElHashashin

+0

@ElHashashin Ich denke, das Format ist falsch. Hast du das Format der ersten überprüft? Ist es der 22. Oktober oder der 12. Dezember? – Berkay

+0

Das Format ist MM-DD-YYYY, also ist es 22. Dezember – ElHashashin

1

Implementieren Sie IValidatableObject in Ihrer Touristenklasse.

Setzen Sie Ihre Logik in die Validate() -Methode.

Sie verwenden MVC, also gibt es keine MessageBox.Show(). Der MVC-Modellbinder ruft automatisch die Validierungsroutine auf.

Hier ist eine andere Frage SO mit den Details How do I use IValidatableObject?

Auch Ihr Alter Logik ist falsch. es muss

sein
DateTime now = DateTime.Today; 
int age = now.Year - bday.Year; 
if (now < bday.AddYears(age)) age--;