2017-06-29 9 views
-3

Ich möchte eine benutzerdefinierte Validierung für ein Datetime-Feld erstellen.Benutzerdefinierte Validierung Datum C#

Es ist meine Klasse Buchung, mit dem Feld "Datum", auf dem ich die Validierung setzen wollen:

public class Booking 
    { 
     public int Id { get; set; } 
     public int Restochoisi { get; set; } 
     public int Nbpeople { get; set; } 
     [CustomValidator] 
     public DateTime Date { get; set; } 
     public int Orga { get; set; } 
    } 

Die Klasse CustomValidator.cs:

[AttributeUsage(AttributeTargets.Property | 
    AttributeTargets.Field, AllowMultiple = false)] 
public class CustomValidator : ValidationAttribute 
{ 
    protected override bool IsValid(object value) 
    { 
     if ((DateTime)value < DateTime.Now) 
      return false; 
     return true; 
    } 

} 

und die BookingController:

[HttpPost] 
    public ActionResult Index(int restochoisi, int nbpeople, DateTime start, int orga) 

    { 
     var context = new BddContexte(); 

     var vm = new BookingViewModel() 
     { 
      Restos = new SelectList(context.Restos.AsEnumerable(), "Id", "Nom"), 
      Utilisateurs = new SelectList(context.Utilisateurs.AsEnumerable(), "Id", "Prenom") 

     }; 

     //ViewBag.result = restochoisi + " " + nbpeople + " " + datepicker + " " + orga; 
     //dal.RestoById(restochoisi) 
     if (ModelState.IsValid) 
     { 
      int id = dal.CreerBooking(restochoisi, nbpeople, start, orga); 
      return View(vm); 
     } 
     return View(vm); 
    } 

Aber es funktioniert nicht. Was ist falsch in meinem Gang bitte?

+2

Was genau funktioniert nicht? erhalten Sie einen Fehler? keine Fehler? – Mederic

+0

Ich erhalte einen Fehler in meiner Funktion "CreerBooking", wenn ich ein "falsches" Datum einstelle. –

Antwort

0

Ihr Controller sollte Ihre Modellklasse mit dem Validator

[HttpPost] 
public ActionResult Index(Booking booking) 
{ 
    // snip 
} 

ohne dass verwenden, ich bin nicht sicher, wie Sie Ihre benutzerdefinierten Validator denken arbeiten würde ?!

+0

Mit dieser Änderung habe ich keinen Fehler, aber der Modellstatus ist immer falsch, auch wenn das Datum korrekt ist. –

+0

@MatthieuVeron - 'ModelState' wird Ihnen sagen, was dann an Ihrem Modell nicht gültig ist. Repariere es. – Jamiec

+0

?? Das ist genau der Zweck meiner Frage. Ich verstehe nicht, was in meinem Code falsch ist, und das bringt das Modelstate nicht zurück, was ich es gerne zurückgeben würde –