2015-11-05 2 views
2

Я знаю, что это распространенный вопрос о синтаксисе даты кендо, однако после двух дней борьбы я все еще не могу решить свою проблему. У меня есть сетка, которая динамически добавляет запись вложенной коллекции в моей модели:Редактирование даты в Кендо с помощью редактирования incell, ASP.NET MVC

@(Html.Kendo().Grid(Model.GTDGoods) 
     .Name("GTDGoods") 
     .ToolBar(toolbar => { toolbar.Create(); }) 
     .Columns(columns => 
{ 
columns.Bound(p => p.GTD_ID).Hidden() 
.ClientTemplate("#= GTD_ID #" + 
"<input type='hidden' name='GTDGoods[#= index(data)#].GTD_ID' value='#= GTD_ID #' />"); 

columns.Bound(p => p.GOOD_NO) 
.ClientTemplate("#= GOOD_NO #" + 
"<input type='hidden' name='GTDGoods[#= index(data)#].GOOD_NO' value='#= GOOD_NO #'/>"); 

columns.Bound(p => p.DATE) 
.ClientTemplate("#=kendo.toString(kendo.parseDate(DATE), 'dd.MM.yyyy') #" + 
"<input type='hidden' name='GTDGoods[#= index(data)#].DATE' value='#= kendo.toString(kendo.parseDate(DATE), 'dd.MM.yyyy') #'/>"); 

columns.Command(command => { command.Destroy(); }); 

}) 
.Editable(editable => editable.Mode(GridEditMode.InCell) 
.CreateAt(GridInsertRowPosition.Bottom)) 
.DataSource(dataSource =>dataSource.Ajax() 
      .Model(model =>{ 
          model.Id(u => u.ID); 
          model.Field(u => u.GTD_ID).DefaultValue(Model.ID); 
          }) 
.ServerOperation(false))) 

Я получаю коллекцию на сервере и все работает отлично, за исключением DATE собственности.

Моя GTDGood модель UIHint:

[UIHint("Date")] 
public DateTime DATE { get; set; } 

И Date шаблон редактор:

@model DateTime? 

<script src="~/scripts/kendo/kendo.culture.ru-ru.js"></script> 
<script type="text/javascript">  
    kendo.culture("ru-RU"); 
</script> 

@(Html.Kendo().DatePickerFor(m => m)) 

Проблема поднимается, когда я изменить значение DATE в сетке, сообщение об ошибке показывает "The field DATE must be a date" и "The specified value "01/01/0001" does not conform to the required format, "yyyy-MM-dd" , Даже если я набираю дату в формате «yyyy-MM-dd», texbox datepicker показывает null. Кроме того, мой датпикер отлично работает за пределами сетки, например. когда я использую его как @Html.EditorFor(e=>e.DATE).

Любая помощь очень ценится.

ответ

0

Если (как) у вас есть:

public DateTime DATE { get; set; } 

не должно быть ничего "разобрать" здесь:

kendo.toString(kendo.parseDate(DATE), 'dd.MM.yyyy') 

, а скорее просто форматирование непосредственно:

kendo.toString(DATE, 'dd.MM.yyyy') 

Или, возможно, , без форматирования:

columns.Bound(p => p.DATE) 
.ClientTemplate("#= DATE #" + 
"<input type='hidden' name='GTDGoods[#= index(data)#].DATE' value='#= DATE #'/>"); 
+0

Хорошо, но это не помогло. –

+0

Вы пытались использовать DATE * как есть *? – Gustav

+0

Да, тогда формат будет как 11 ноября 2015 г. 16:00 00 GMT + 6 ... –

0

Вы пытались добавить формат на DatePickerFor?

@(Html.Kendo().DatePickerFor(m => m)).Format("dd.MM.yyyy").Culture("ru-RU")); 

или

@Html.Kendo().DatePickerFor(m => m).Format("dd.MM.yyyy").Culture("ru-RU"); 
0

Изменение:

[UIHint("Date")] 
public DateTime DATE { get; set; } 

в

[UIHint("Date")] 
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd.MM.yyyy}")] 
public DateTime DATE { get; set; } 
0
//This code works for me 

    @(Html.Kendo().Grid<DemoKendoScheduler.Models.DateParsing>() 
      .Name("GTDGoods") 
      .ToolBar(toolbar => { toolbar.Create(); }) 
      .Columns(columns => 
    { 
     columns.Bound(p => p.GTD_ID).Hidden() 
     .ClientTemplate("#= GTD_ID #" + 
     "<input type='hidden' name='#= GTD_ID#' value='#= GTD_ID #' />"); 

     columns.Bound(p => p.GOOD_NO) 
     .ClientTemplate("#= GOOD_NO #" + 
     "<input type='hidden' name='#= GOOD_NO#' value='#= GOOD_NO #'/>"); 

     columns.Bound(p => p.DATE) 
     .ClientTemplate("#=kendo.toString(kendo.parseDate(DATE), 'dd.MM.yyyy') #" + 
     "<input type='hidden' name='#= DATE#]' value='#= kendo.toString(kendo.parseDate(DATE), 'dd.MM.yyyy') #'/>"); 

     columns.Command(command => { command.Destroy(); }); 

    }) 
    .Editable(editable => editable.Mode(GridEditMode.InCell) 
    .CreateAt(GridInsertRowPosition.Bottom)) 
    .DataSource(dataSource => dataSource.Ajax() 
       .Model(model => 
       { 
        model.Id(u => u.GTD_ID); 
        //model.Field(u => u.GTD_ID); 
       }) 
    .ServerOperation(false))) 

//Model 
public class DateParsing 
    { 
     public int GTD_ID { get; set; } 
     public string GOOD_NO { get; set; } 
     [UIHint("Date")] 
     public DateTime DATE { get; set; } 
    } 
1

Мы, наконец, нашли решение, добавив в _Layout.cshtml:

<script src="@Url.Content("~/Scripts/kendo/2014.1.318/cultures/kendo.culture.en-GB.min.js")"></script> 

    @{ 
     var culture = System.Threading.Thread.CurrentThread.CurrentCulture.ToString(); 
    } 
    <script> 
     kendo.culture("@culture"); 
     var culture = kendo.culture(); 
     culture.calendar.patterns.F = "dd/MM/yyyy"; 
    </script> 
Смежные вопросы