example eonasdan dates bootstrap c# jquery twitter-bootstrap datetime datepicker

c# - eonasdan - Bootstrap 3 Datepicker y DateTime error de validación



eonasdan bootstrap datetimepicker (2)

Creo que locale: "pt" se menciona mal. Por favor quítalo y prueba.

Porfavor lea abajo:

Estoy usando Bootstrap 3 Datepicker ( http://eonasdan.github.io/bootstrap-datetimepicker/ ) para presentar un Selector de fecha y hora para una propiedad modelo:

Modelo:

[Table("Calls")] public partial class Call { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int Id { get; set; } [Required(ErrorMessage = "Campo obrigatório")] [Display(Name = "Data e Hora de início")] [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd-MM-yyyy HH:mm}")] public DateTime DateOfTheCall { get; set; } }

Ver:

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

Establecí el selector de fecha con el formato de fecha:

// initialise any date pickers $(''.date'').datetimepicker({ locale: ''pt'', format: ''DD-MM-YYYY HH:mm'' });

También puse la cultura en el archivo web.config:

<globalization culture="pt-PT"/>

Pero siempre recibo el mensaje de error:

The field Data e Hora de início must be a date.


Después de muchas horas, finalmente encontré una manera de crear una buena solución, basada en el complemento de Globalización de Validación de jQuery:

Esta extensión tiene las siguientes dependencias:

  • Validación de jQuery (que a su vez depende de jQuery)
  • Globalizar v1.x (que a su vez depende de CDLR)

El código final

Primero, incluye las bibliotecas (respeta el orden):

<script src="~/Scripts/cldr.js"></script> <script src="~/Scripts/cldr/event.js"></script> <script src="~/Scripts/cldr/supplemental.js"></script> <script src="~/Scripts/cldr/unresolved.js"></script> <script src="~/Scripts/globalize.js"></script> <script src="~/Scripts/globalize/number.js"></script> <script src="~/Scripts/globalize/date.js"></script> <script src="~/Scripts/moment.min.js"></script> <script src="~/Scripts/moment-with-locales.min.js"></script> <script src="~/Scripts/bootstrap/bootstrap.js"></script> <script src="~/Scripts/respond/respond.js"></script> <script src="~/Scripts/jquery/jquery.validate.min.js"></script> <script src="~/Scripts/jquery/jquery.validate.unobtrusive.min.js"></script> <script src="~/Scripts/jquery/jquery.validate.globalize.min.js"></script> <script src="~/Scripts/bootstrap-datetimepicker.js"></script>

Yo uso el patrón del módulo para el script:

// Module Pattern // More information: http://toddmotto.com/mastering-the-module-pattern/ var Layout = (function ($) { // Prevents certain actions from being taken and throws exceptions "use strict"; // Private functions var _init = function () { // Use $.getJSON instead of $.get if your server is not configured to return the // right MIME type for .json files. $.when( $.getJSON("/Scripts/cldr/supplemental/likelySubtags.json"), $.getJSON("/Scripts/cldr/main/numbers.json"), $.getJSON("/Scripts/cldr/main/ca-gregorian.json"), $.getJSON("/Scripts/cldr/supplemental/timeData.json") ).then(function () { // Normalize $.get results, we only need the JSON, not the request statuses. return [].slice.apply( arguments, [ 0 ] ).map(function( result ) { return result[ 0 ]; }); }).then( Globalize.load ).then(function() { // Your local settings code goes here. Globalize.locale("pt-PT"); }); // initialise any date pickers (I had my own properties) $(''.date'').datetimepicker({ locale: ''pt'', format: ''DD-MM-YYYY HH:mm'', sideBySide: true, showClose: true, defaultDate: new Date(Date.now()), toolbarPlacement: ''top'', showTodayButton: true, showClear: true, }); }; return { // Public functions init: _init }; })(jQuery); // Load when ready $(document).ready(function () { Layout.init(); });

La vista sigue siendo la misma.