2017-09-06 5 views
0

Ich habe Probleme mit dem Datum des Formats dd/MMM/YYYY auf MVC5 asp.net Projekt. Hauptsächlich in Chrome, da es anscheinend nur Datumsangaben im Format JJJJ/MM/TT akzeptiert.HTML5 Datum des Formats TT/MMM/JJJJ

Um das Verhalten in Browsern zu normalisieren, verwende ich eine jquery datetimepicker-Komponente.

Ich habe viele Dinge ausprobiert, aber Chrome sagt immer noch, dass das Datum nicht gültig ist. Auch danach definieren Sie die Eingabe als Text statt als Datum.

Auch wenn ich die Validierung für diese bestimmte Komponente (data-val = "false") deaktiviere, besteht Chrome weiterhin darauf, das Datum als ungültig zu markieren.

Modell:

public class order 
{ 
    [Key] 
    public int orderID { get; set; } 

    [Required] 
    public string comments { get; set; } 

    [Required] 
    [DisplayFormat(DataFormatString = "{0:dd/MMM/yyyy}", ApplyFormatInEditMode = false)] 
    [Display(Name = "Date of Shipping")] 
    public DateTime date { get; set; } 
} 

Ansicht Datumseingabe:

<div class="form-group"> 
    @Html.LabelFor(model => model.date, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.EditorFor(model => model.date, new { htmlAttributes = new { @class = "form-control datetimepicker" } }) 
     @Html.ValidationMessageFor(model => model.date, "", new { @class = "text-danger" }) 
    </div> 
</div> 

Importe:

<script src="https://code.jquery.com/jquery-3.2.1.js"/script> 
<link rel="stylesheet" type="text/css" href="~/Content/jquery.datetimepicker.min.css" /> 
<script src="~/Scripts/jquery.datetimepicker.full.min.js"></script> 

Javascript:

<script type="text/javascript"> 
    jQuery.datetimepicker.setLocale('es'); 

    jQuery('#date').datetimepicker({ 
     format: 'd/M/Y', 
    }); 
</script> 
+0

Mit '[Datatype (DataType.Date)]' und '[Displayformat (Dataformatstring = "{0: tt/MMM/JJJJ}", ApplyFormatInEditMode = true)] ist sinnlos, wenn Sie einen jquery datepicker verwenden (und dann können Sie den 'neuen {@type =" text "}' ' –

+0

entfernen. Wenn Sie einen clientseitigen Fehler bekommen, ist es, weil' jquery.validate' Daten basierend auf validiert 'MM/TT/JJJJ' Format. Sie müssen den Validator neu konfigurieren, um Daten in Ihrem Format zu akzeptieren. –

+0

Entfernen Sie '@type =" text "' - dieses Attribut ist nicht verwandt. Auch Ihr Datetimepicker-Format scheint falsch zu sein - es sollte '$ ('# date') sein. Datetimepicker ({format:" DD/MMM/YYYY "})'. Setzen Sie dann die clientseitige Validierung mit folgendem Wert: '$ .validator.methods.date = function (value, element) {return this.optional (element) || $ .datetimepicker.parseDate ('DD/MMM/YYYY', Wert); } ' –

Antwort

0

war ich endlich in der Lage, das Problem zu beheben:

-Fisrt Sie brauchen moment.js zu einem Projekt hinzuzufügen, kann es NutGet Manager hinzugefügt werden, verwenden, dann auf Ihren Seiten verweisen:

@Scripts.Render("~/Scripts/moment-with-locales.min.js") 

Sehr wichtig, wenn mit Daten auf nicht Englisch-Format arbeitet, müssen Sie Zeit-mit-locales als ob nicht auch nach Änderung locale importieren als ‚en‘

-Dann hinzufügen folgenden Java-Script-Code bleiben:

$.datetimepicker.setDateFormatter({ 
    parseDate: function (date, format) { 
     var d = moment(date, format); 
     return d.isValid() ? d.toDate() : false; 
}, 

formatDate: function (date, format) { 
    return moment(date).format(format); 
    } 
}); 

$.validator.methods.date = function (value, element) { 
    return this.optional(element) || moment(value, "DD/MMM/YYYY", 'es').isValid(); 
} 

-Auch, dass Datetime Initialisierung Änderungen beachten Sie wie folgt vor:

jQuery('#date').datetimepicker({ 
    format: 'DD/MMM/YYYY HH:mm', 
    formatTime: 'HH:mm', 
    formatDate: 'DD/MMM/YYYY' 
}); 
Verwandte Themen