JQuery Великобритании Дата проверки проблемы.«20/05/2019 недопустимо значение DateTime» - PullRequest
0 голосов
/ 20 мая 2019

У меня возникла проблема с попыткой проверки jquery на некоторое время для принятия даты в формате uk, в основном, когда я добавляю @ Scripts.Render ("~ / bundles / jqueryval") в свой раздел, проверка не распознает мое поле даты имеет допустимое значение.

Я следовал этому руководству (http://www.ablogaboutcoding.com/2017/08/12/mvc-uk-date-issues/), чтобы попытаться решить проблему, но столкнулся с проблемой, с которой, я надеюсь, кто-то может помочь. Эта проблема возникает, когда ModelBinder пытается преобразовать значение uk в значение DateTime. Код ниже:

Я попытался преобразовать значение в DateTime (см. Var date2), и это будет работать с датами Великобритании, но я не могу затем применить правильную культуру.

Модель Binder:

 public class NullableDateTimeModelBinder : IModelBinder
    {
        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);

            if (value == null || string.IsNullOrWhiteSpace(value.AttemptedValue))
                return null;           

            bindingContext.ModelState.SetModelValue(bindingContext.ModelName, value);

            try
            {
                var date2 = Convert.ToDateTime(value.AttemptedValue); 

                var date = value.ConvertTo(typeof(DateTime), Thread.CurrentThread.CurrentUICulture);                

                return date;
            }
            catch (Exception ex)
            {
                bindingContext.ModelState.AddModelError(bindingContext.ModelName, ex);
                return null;
            }
        }
    }

Сбой при изменении даты. Внутреннее исключение = "Строка не была распознана как действительный DateTime". Сообщение = "20/05/2019 не является допустимым значением для DateTime".

Если я введу дату «10/05/2019», я не получу исключения, поскольку она может быть преобразована в американскую дату.

Модель:

     [Required(ErrorMessage = "Enter the planned start date of the project")]
            [DataType(DataType.Date)]       
            [Column(TypeName = "DATE")]
            public DateTime? PlannedStartDate { get; set; }

Вид:

<div class="form-inline">
        <div class='input-group date mydatepicker'>
            @Html.TextBoxFor(m => m.FormData.PlannedStartDate, new { title = "Planned Start Date", @class = "form-control", placeholder = "dd/mm/yyyy" })

            <span class="input-group-addon">
                <span class="glyphicon glyphicon-calendar"></span>
            </span>
        </div>
    </div>

Сценарии

$(document).on('click', '#ajaxCreate2', function () {
var $form = $('#form0')
            .validate({
                rules: {
                    FormData_PlannedStartDate: {
                        dateITA: true
                    }
                }
            });
            if ($form.valid()) {           

            $.ajax({

                async: false,             
                type: 'POST',
                url: 'ajaxCreate',
                datatype: "json",
                data:               
                        JSON.stringify($('#form0').serialize()),                      

                success: function (data) {

                }
            });
            } else {
                var validator = $('#form0').validate();

                $.each(validator.errorMap, function (index, value) {


                    $(function () {
                        var a = value;
                        if (a != '')
                            toastr.error("", a);              

                    })   

                });

            }
        });

1 Ответ

0 голосов
/ 20 мая 2019

Вы должны будете быть точными в своих конверсиях в DateTime и использовать конкретную культуру, вместо того чтобы полагаться на культуру сервера по умолчанию.

DateTime.Parse("20/05/2019", CultureInfo.GetCultureInfo("en-gb"))

Это будет правильно анализировать формат в Великобритании (дд / мм/ гггг) даты.

...