2012-10-11 9 views
6

Ich habe Probleme mit der Einstellung Validierungen Datumsformat Chrome in asp.net mvc, für andere Browser wie IE, funktioniert Firefox korrekt.Asp.net MVC Set Validierung Datumsformat schlägt auf Chrome

Ich habe in meinem Modell wie nächster Code definiert Termine:

[Required] 
[Display(Name = "Data fi publicació")] 
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] 
public DateTime PublishingEndDate { get; set; } 

Und in meinen Ansichten:

@Html.TextBoxFor(model => model.PublishingEndDate) 
@Html.ValidationMessageFor(model => model.PublishingEndDate) 

Das Problem Es dass @Html.ValidationMessageFor scheint, mit Format das Datum bestätigt MM/dd/yyyy, aber was Ich möchte mit dem europäischen Format dd/MM/yyyy validieren. Wie kann ich das Datumsformat der Standard-Kulturvalidierungen in dd/MM/yyyy ändern?

Danke für Ihre Hilfe

+0

Es wurde eine ähnliche Frage hier gestellt: http://stackoverflow.com/questions/5199835/mvc-3-jquery-validation-globalizing-of-number-decimal-field –

Antwort

21

Schließlich entdecke ich, das Problem betrifft nur Chrome, IE, Firexfox es funktioniert perfekt, es scheint, ist ein Chrom Fehler, fand ich die Lösung in http://forums.asp.net/t/1729179.aspx/1

Der Validator Methode von jquery muss außer Kraft gesetzt werden, um den folgenden Code:

$(document).ready(function() { 
    $('.calendarPicker').datepicker({ dateFormat: "dd/mm/yy" }); 

$.validator.addMethod('date', 
    function (value, element, params) { 
     if (this.optional(element)) { 
      return true; 
     } 

     var ok = true; 
     try { 
      $.datepicker.parseDate('dd/mm/yy', value); 
     } 
     catch (err) { 
      ok = false; 
     } 
     return ok; 
    }); 
}); 
+0

Mein Problem war, dass wenn ich ein zweites Datum im Datepicker wählte, würde es mir einen Validierungsfehler geben - nur in Chrome (mit 40.0.2214.115). Diese Lösung hat es fast drei Jahre nach der ursprünglichen Frage behoben! Schön! – ComfortablyNumb

0

das half mir:

$(function() { 
      $(".datepicker").datepicker({ 
       todayBtn: true, 
       language: "en-GB", 
       format: "dd/mm/yyyy", 
       clearBtn: true, 
       pickTime: false 
      }); 

      $.validator.addMethod("date", 
       function(value, element) { 
        return this.optional(element) || parseDate(value, "dd-MM-yyyy") !== null; 
       }); 
     }); 
0

Um die clientseitige Validierung zu vermeiden, möchten Sie keine Datenvaliditätsattribute mit der Eingabe verknüpfen. Also, was ich tat ist die einfache HTML aufzuschreiben statt mit TextFor oder EditorFor etc ...

<input type="text" class="datepicker form-control"> 

funktioniert gut für mich ...

0

Wenn Sie nicht Datetime-Picker verwenden möchten :

Client-Validierung Probleme wegen der MVC-Bug (auch in MVC 5) in jquery.validate.unobtrusive.min.js auftreten können die nicht Datum/datetime-Format in irgendeiner Weise akzeptiert. Leider müssen Sie es manuell lösen.

Meine endlich Arbeitslösung:

Sie müssen gehören vor:

@Scripts.Render("~/Scripts/jquery-3.1.1.js") 
@Scripts.Render("~/Scripts/jquery.validate.min.js") 
@Scripts.Render("~/Scripts/jquery.validate.unobtrusive.min.js") 
@Scripts.Render("~/Scripts/moment.js") 

Sie moment.js installieren können:

Install-Package Moment.js 

Und dann kann man endlich fix hinzufügen für Datumsformat-Parser:

$(function() { 
    $.validator.methods.date = function (value, element) { 
     return this.optional(element) || moment(value, "DD.MM.YYYY", true).isValid(); 
    } 
}); 
Verwandte Themen