Telerik формат даты и времени в пользовательском шаблоне редактора сетки неправильно передается в контроллер - PullRequest
0 голосов
/ 06 октября 2011

У меня есть пользовательский шаблон редактора для детали автомобиля, который используется в сетке telerik для вставки в бритву mvc3. Шаблон редактора включает поле даты и времени. При вставке новой детали транспортного средства поле даты и времени является неправильным и формат изменяется.

Например, если я вставлю «06/10/2011», который является 6-м днем, 10-м месяцем и 2011 годом, в контроллер, поле dateTime в модели будет «10/06/2011», которое является 10-м днем 6 и 211 год. Я пользуюсь датёром Telerik

Как правило, день и месяц переключаются после отправки в контроллер

В моем коде есть другие экземпляры, где я передаю поле datetime без проблем, поэтому я считаю, что проблема в том, что я использую пользовательский шаблон редактора ...

Вот код для сетки:

@(Html.Telerik().Grid<VehiclePartsViewModel>()
    .Name("VehiclePartsViewModel")
    .ToolBar(commands => 
    {   commands.Insert();
    })
    .DataKeys(keys => keys.Add(c => c.Id))
    .ClientEvents(events => events.OnRowDataBound("onRowDataBound"))
    .DataBinding(dataBinding => dataBinding
        .Ajax()
            .Insert(MVC.Vehicles.CustomCoverage._InsertPart().GetRouteValueDictionary())
            .Select(MVC.Vehicles.CustomCoverage._SelectPart().GetRouteValueDictionary())
            .Update(MVC.Vehicles.CustomCoverage._SavePart().GetRouteValueDictionary())
            .Delete(MVC.Vehicles.CustomCoverage._DeletePart().GetRouteValueDictionary())
        )
    .Columns(columns =>
    {
        omitted..
    })
    .Footer(false)
    .Editable(editing => editing.Mode(GridEditMode.PopUp))

Упрощенный шаблон редактора:

<div>
    @Html.LabelFor(v => v.ItemId, new { @class = "uc-caption"}) &nbsp;
    @Html.EditorFor(v => v.ItemId)
</div><br />
<div>
    @Html.LabelFor(v => v.InstallDate, new { @class = "uc-caption"}) &nbsp;
    @Html.EditorFor(v => v.InstallDate, new { Modifiable = true })
</div>

Я также использую шаблон редактора для dateTime, но я не думаю, что проблема здесь:

@( 
    Html.Telerik().DatePicker()
    .Name(ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty))
    .HtmlAttributes(new { id = ViewData.TemplateInfo.GetFullHtmlFieldName(string.Empty) + "_wrapper" })
    .ShowButton(true)
    .Value(Model.HasValue ? Model.Value : new DateTime())
    .ClientEvents(events => events.OnChange("onChangeDatePicker"))
    .InputHtmlAttributes(new { style = "width:100%"})
    .Enable(ViewData["Modifiable"] != null ? (bool)ViewData["Modifiable"] : true)

)

Спасибо

Ответы [ 2 ]

2 голосов
/ 02 ноября 2011

Хорошо, так что я наконец-то смог решить эту проблему с помощью telerik .. Кажется, есть проблема с установкой глобализации в true. Вы должны добавить строку перед этим .. Вот как теперь выглядит мой _layout.cshtml. .

@(Html.Telerik().ScriptRegistrar()
        .OnDocumentReady(@<text></text>) //Telerik: This is required because there is still no Telerik components on the page and jQuery(document).ready will not be rendered and the globalization will not work
        .Globalization(true)    
1 голос
/ 10 октября 2011

Возможно, у вас проблемы с глобализацией / локализацией вашего приложения. Смешиваются разные культуры.

У меня была такая же проблема при публикации значений с плавающей запятой, и я решил ее, добавив этот метод в Global.asax.cs:

protected void Application_AcquireRequestState(object sender, EventArgs e)
{
      System.Threading.Thread.CurrentThread.CurrentUICulture = new CultureInfo("en");
      System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en");
}
...