0

У меня есть приложение asp.net MVC с культурой «es-MX». Вот что у меня есть в моем файле web.config:Kendo DatePicker Ошибка связывания с глобализацией

<globalization enableClientBasedCulture="true" uiCulture="es-MX" culture="es-MX"></globalization> 

И вот что у меня есть в моей странице _layout:

<script type="text/javascript"> 
    $(function() { 
     //set current to the "es-MX" culture script 
     kendo.culture("es-MX"); 
    }) 
</script> 

У меня есть кендо DatePicker так:

@(Html.Kendo().DatePickerFor(model => model.StartDate) 
    .HtmlAttributes(new { @class = "input-field" }) 
) 

Когда я отправляю форму на свой контроллер, поле StartDate равно null.

Вот ответ, который я получаю от сервера:

"Ошибки": { "StartDate": { "ошибки": [ "Значение \ u002707/10/2016 12:00:00 утра \ u0027 не является действительным для Fecha де Inicio. "]}}

к слову, Accept-Language запроса, который отправляется на сервер„EN-US“, который я нахожу странным.

UPDATE:

Я пытался использовать пользовательские модели связующие для DateTime, например:

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

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

     DateTime dateTime; 
     var isDate = DateTime.TryParse(value.AttemptedValue, Thread.CurrentThread.CurrentUICulture, 
      DateTimeStyles.None, out dateTime); 

     if (!isDate) 
     { 
      bindingContext.ModelState.AddModelError(bindingContext.ModelName, "La fecha es válido."); 
      return DateTime.UtcNow; 
     } 

     return dateTime; 
    } 
} 

Но, похоже, проблема с временной частью даты, переданной контроллер. Значение 07/10/2016 12:00:00 a. m. не признается ни в одной из дней ни в культуре «es-MX», ни в «en-US».

+0

Я не думаю, что проблема связана с культурой, потому что 07/10/2016 должна быть датой подтверждения как в es-MX (7 октября), так и в США (10 июля) –

+0

@ AndrésNava-.NET, Я знаю, но у меня нет проблем, когда я удаляю es-MX-культуру из файла web.config и страницы _Layout. Однако, если я просто изменил культуру DatePicker на en-US, он все равно не будет связываться. – ataravati

+0

@ AndrésNava-.NET, см. Мое обновление. – ataravati

ответ

0

я понял, что этот вопрос. Согласно documentation, сценарии культуры Kendo UI создаются на основе форматов Windows . Я использую Windows 7. Так что, я должен поставить эту культуру Helper на верхней части страницы, чтобы убедиться, что скрипты генерируются на основе текущего .NET или указанной культуры:

@Html.Kendo().Culture() 

Без этого помощника , даты, отправленные на сервер, будут такими, как 07/10/2016 12:00:00 a. m. (обратите внимание на пробел между символами. и m.), и мой MVC не сможет их связать. После использования помощника даты будут такими, как 07/10/2016 12:00:00 a.m. (без пробела).

0

На первый взгляд, ваше сообщение об ошибке указывает неверный формат дата была передана модель:

"Ошибки": { "STARTDATE": { "ошибки": [ "Значение \ u002707/10/2016 12:00:00 утра \ u0027 не является действительным для Fecha де Inicio. "]}}

рассматривая перевод Unicode из предоставленного формата JSON, сообщение может быть извлечена в качестве

" Ошибки ":{"Дата начала ": {" errors ": [" Значение '07/10/2016 12:00:00 a. м. ' не действует для Fecha де Inicio. "]}}

'07/10/2016 12:00:00 a. m.' указывает формат даты передается в виде строки вместо узнаваемого значения DateTime, следовательно, ваши model.StartDate возвращает нуль, так как время часть с AM/PM состояние не является . действительный DateTime или Nullable<DateTime> значение

Попробуйте установить сценарий глобализации в ваш взгляд:

@section HeadContent 
{ 
    <script src="@Url.Content("~/Scripts/kendo.all.min.js")"></script> 
    <script src="@Url.Content("~/Scripts/cultures/kendo.culture.es-MX.min.js")"></script> 
} 

или макет страницы:

<head> 
<script src="@Url.Content("~/Scripts/kendo.all.min.js")"></script> 
<script src="@Url.Content("~/Scripts/cultures/kendo.culture.es-MX.min.js")"></script> 
</head> 

NB: Измените ~/Scripts/cultures/ на свой путь к каталогу Jend Kendo.

Если попытка (ы) выше по-прежнему не будет работать, установить формат отображения строки на DatePickerFor:

@{ 
    Culture = "es-MX"; 
} 

@(Html.Kendo().DatePickerFor(model => model.StartDate) 
    .Name("StartDate") 
    .Culture("es-MX") 
    .Format("dd/MM/yyyy") 
    .ParseFormats(new String[] { "dd/MM/yyyy" }) 
    .HtmlAttributes(new { @class = "input-field" }) 
) 

или путем добавления пользовательского правила для ввода даты, как это (взято из ответа Эдин Mahmutovic в How to valid date format dd.MM.yyyy KENDO MVC):

kendo.ui.validator.rules.mvcdate = function (input) { 
    if ($(input.attr('name')) === 'StartDate') { 
     return input.val() === "" || kendo.parseDate(input.val(), "dd/MM/yyyy") !== null; 
    } 
    return true; 
} 

AFAIK, когда конкретная строка формата даты не устанавливается Format метод, он использует по умолчанию формат, показанный на этом примере: http://demos.telerik.com/aspnet-mvc/datepicker/index.

Похожие проблемы: ссылки

Kendo datepicker acting weired for different computers on two different timezone

Kendo DatePicker culture not working correctly

http://www.telerik.com/forums/wrong-format

Глобализация: http://docs.telerik.com/kendo-ui/aspnet-mvc/globalization

+0

У меня нет проблем с отображением даты в правильном формате. Проблема связана с датой, отправленной на сервер. Я уже нашел, в чем проблема. Проверьте мой ответ. – ataravati

Смежные вопросы