2014-11-28 5 views
5

Ich möchte ein Datetime-Feld in einem Formular überprüfen. Das Feld ist zwischen dem 01.10.2008 und dem 01.12.2008 gültig. Hier ist, wie ich die Viewmodel-Eigenschaft definiert:ASP MVC 5 Client Validierung für den Bereich der Datumsangaben

Ich möchte dies auf der Clientseite validieren. Aber ich bekomme immer einen Fehler. Ich gebe den Wert 01/11/2008 und es sagt mir, dass das Datum zwischen 01/10/2008 und 01/12/2008 definiert werden muss. Ich habe gelesen, dass es Client-Validierung ohne jquery nicht funktioniert, oder? Oder ich habe etwas vergessen? Welche Alternativen gibt es, um dieses Problem zu lösen?

Antwort

10

ich glaube, Sie dies mit benutzerdefinierten Validierung in MVC implementieren können. Versuchen Sie dies mit:

[ValidateDateRange] 
public DateTime StartWork { get; set; } 

Hier ist Ihre benutzerdefinierte Validierung Implementierung:

namespace MVCApplication 
    { 

     public class ValidateDateRange: ValidationAttribute 
     { 
      protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
      {     
       // your validation logic 
       if (value >= Convert.ToDateTime("01/10/2008") && value <= Convert.ToDateTime("01/12/2008")) 
       { 
        return ValidationResult.Success; 
       } 
       else 
       { 
        return new ValidationResult("Date is not in given range."); 
       } 
      } 
     } 
    } 

UPDATE:

Sie auch als Parameter Datumsbereiche passieren können, um die Validierung eine generische zu machen:

[ValidateDateRange(FirstDate = Convert.ToDateTime("01/10/2008"), SecondDate = Convert.ToDateTime("01/12/2008"))] 
public DateTime StartWork { get; set; } 

Benutzerdefinierte Validierung:

namespace MVCApplication 
     { 

      public class ValidateDateRange: ValidationAttribute 
      { 
       public DateTime FirstDate { get; set; } 
       public DateTime SecondDate { get; set; } 

       protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
       {     
        // your validation logic 
        if (value >= FirstDate && value <= SecondDate) 
        { 
         return ValidationResult.Success; 
        } 
        else 
        { 
         return new ValidationResult("Date is not in given range."); 
        } 
       } 
      } 
     } 

UPDATE 2: (für Client-Seite) Eine sehr einfache jQuery Logik sollte die Client-Validierung tun. Unten:

$(document).ready(function(){ 

    $("#btnSubmit").click(function(){ 

    var dt = $("#StartWork").val(); 

    var d = new Date(dt); 
    var firstDate = new Date("2008-01-10"); 
    var secondDate = new Date("2008-01-12"); 

    if(d>= firstDate && d<= secondDate) 
    { 
     alert("Success"); 
    } 
    else 
    { 
     alert("Date is not in given range."); 
    } 

    }); 

}); 

überprüfen Sie bitte diese JSFiddle die Arbeits Demo zu sehen: Date Range Validation

+1

Dies ist die Route, die ich nehmen würde, aber ich würde auch den Datumsbereich hinzufügen, um als Parameter zu validieren, so dass der Code für alle Arten von Datumsbereichen wieder verwendet werden kann – JensB

+0

Danke, werde ich versuche diesen Vorschlag! – MrScf

+0

Überprüfen Sie das Update. Bitte akzeptieren Sie die Antwort, wenn es funktioniert. – Saket

-1

Verwenden Dataformat-Attribut für die Angabe des Datumsformats ausdrücklich als,

[DisplayFormat(DataFormatString="{0:C}")] 

Siehe MSDN doc

+0

Wäre es, dass bei der Validierung auf Client-Seite helfen? – MrScf

+0

Ich habe diesen Link gefunden http://stackoverflow.com/questions/21777412/mvc-model-validation-for-date. Es scheint, jquery funktioniert nicht mit Bereichen – MrScf

0

den Bereich Datum prüfen auch FluentValidation mit getan werden kann, dass eine andere Lösung für Ihr Problem sein kann, überprüfen Sie meine Antwort sie. Sie müssen Termine in einem bestimmten Format auf dem Attribute angeben und Sie auch viel um den Wert in diesem Format als auch Hope this

MVC model validation for date

2

hilft. Die Datumseingabe mag nicht MM/dd/yyyy, obwohl das das Format ist, in dem es angezeigt wird! Ziemlich zurückgeblieben IMHO.

Sie müssen wie so min und max hinzuzufügen:

Html Resultierende

<input class="form-control text-box single-line input-validation-error" data-val="true" data-val-date="The field DOB must be a date." data-val-required="The DOB field is required." id="DOB" name="DOB" type="date" value="1932-01-01" aria-required="true" aria-describedby="DOB-error" aria-invalid="true" min="1932-01-01" max="2015-01-01"> 

Modell

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
[DataType(DataType.Date)] 
public DateTime DOB { get; set; } 

Ansicht

@Html.EditorFor(model => model.DOB, new { htmlAttributes = new { @class = "form-control", min = "1900-01-01", max = "2015-01-01" } }) 

Dann werden Sie min oder max Fehler in der Benutzeroberfläche erhalten:

enter image description here

Verwandte Themen