自定义网格编辑器模板中的telerik日期时间格式未正确传递给控制器

时间:2011-10-06 18:44:31

标签: asp.net-mvc datetime telerik telerik-mvc datetime-format

我有一个车辆部件的自定义编辑器模板,用于在telerik网格中插入mvc3 razor。编辑器模板包括日期时间字段。插入新车辆零件时,日期时间字段不正确,格式也会更改。

例如,如果我插入“06/10/2011”,即第6天,第10年和第2011年,在控制器中,模型中的dateTime字段为“10/06/2011”,即第10个月6和211年。我正在使用telerik的日期选择器

基本上,提交到控制器

后,日期和月份都会切换

我的代码中有其他实例,我传递的是一个没有问题的日期时间字段,所以我认为问题在于我正在使用自定义编辑器模板......

以下是网格的代码:

@(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 个答案:

答案 0 :(得分:2)

好的,所以我终于能够通过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 :(得分:1)

您的应用程序的全球化/本地化可能存在问题。 不同的文化混在一起。

发布浮点值时遇到了同样的问题,并通过将此方法添加到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");
}