0

ich auf einer Produktionsumgebung arbeite. Das Problem ist, dass das DOB-Feld mit MVC-Modellvalidierungen versehen ist und in der Ansicht jquery.validate.unobtrusive.js verwendet wird, um das Formular zu validieren.MVC-Modell Validierung fehlschlägt - Datum ein gültiges Datum sein muss

Datumsauswahl wird verwendet, um das Datum zu wählen, wenn ich das Formular, das ModelState.IsValid ausfällt.

Der Code ist unten abgebildet. Dies funktioniert ordnungsgemäß mit Chrome, aber nicht in anderen Browsern.

In meinem Modell:

[Required(ErrorMessage = "Please enter DOB")] 
[DataType(DataType.Date)] 
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)] 
public Nullable<System.DateTime> DOB { get; set; } 

Das ist meine Ansicht:

<div class="col-md-6"> 
    <div class="col-xs-12"> 
     <label>DATE OF BIRTH<p>*</p></label> 
    </div> 
    <div class="col-xs-12"> 
     <div class="form-group"> 
      <div class="input-group" id="datetimepicker2"> 
       @Html.TextBoxFor(d => d.DOB, new { @class = "form-control input-validation-error" }) 
       <span class="input-group-addon"><span class="icon-small-calendar"></span></span> 
       </div> 
      @Html.ValidationMessageFor(m => m.DOB) 
      </div> 
    </div> 
</div> 

Das ist mein picker ist:

$('#datetimepicker2').datetimepicker({ 
     format: 'MM/DD/YYYY',   
     maxDate: new Date() 
    }); 

In meinem Controller:

if (ModelState.IsValid) 
    { 
     ///some action 
    } 

In meinem web.config:

<add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 

Kann mir jemand helfen, wie diese

für alle Browser zu beheben

Vielen Dank im Voraus Tarak

+0

https: //stackoverflow.com/questions/28114874/html-displayfor-dateformat-mm-dd-yyyy kann es –

Antwort

0

Normalerweise muss der Fehler „Datum ein gültiges Datum sein "wird Client-seitig (im Browser) vom JQuery-Validierungsframework generiert. Wenn dies der Fall ist, müssen Sie die JavaScript-Methode überschreiben, die für die Validierung verwendet wird. Um dies zu tun, in einem Client-Side JavaScript IIFE, könnte man so etwas hinzufügen:

if (!$.validator) { 
    return; 
} 

// Tell the validator that we want dates parsed using Globalize 
    $.validator.methods.date = function(value, element) { 
    // parse the value parameter into a Date datatype using your own logic or that of a framework like JQuery Globalize. In the example, I used JQuery Globalize 
    var parsedValue = Globalize.parseDate(value, $.validator.methods.dateGlobalizeOptions.dateParseFormat);. 
     return this.optional(element) || (parsedValue instanceof Date); 
    }; 

Zusätzlich könnten Sie einen benutzerdefinierten Databinder auf der Serverseite implementieren müssen:

public class DateTimeModelBinder : DefaultModelBinder 
{ 
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName).AttemptedValue; 

     object result = null; 
     if (value != null) 
     { 
      result = DateTime.ParseExact(value, "MM/DD/YYYY", CultureInfo.InvariantCulture, DateTimeStyles.None);     
     } 

     return result; 
    } 
} 
//and in global.asax.cs add 
ModelBinders.Binders.Add(typeof(Datetime), new Binders.DateTimeModelBinder()); 
+0

@Tarak helfen werden, ich habe die global.asax.cs bearbeitet, wie vorgeschlagen. Danke und Entschuldigung für den Tippfehler! –

Verwandte Themen