У меня есть эта модель:MVC4 Кендо Сетка DateTime шаблон редактора
public class MainModel
{
private Guid m_id;
public Guid Id
{
get { return m_id; }
set { m_id = value; }
}
private string m_name;
public string Name
{
get { return m_name; }
set { m_name = value; }
}
private ObservableCollection<Foundation> m_foundations;
public ObservableCollection<Foundation> Foundations
{
get
{
if (m_foundations== null)
m_foundations= new ObservableCollection<Foundation>();
return m_foundations;
}
set { m_foundations= value; }
}
}
public class Foundation
{
private ObservableCollection<Worker> m_workers;
public ObservableCollection<Worker> Workers
{
get
{
if (m_workers == null)
{
m_workers = new ObservableCollection<Worker>();
}
return m_workers;
}
set { m_workers = value; }
}
}
public class Worker
{
[HiddenInput(DisplayValue = false)]
public Guid Id
{
get { return m_id; }
set { m_id = value; }
}
[DataType(DataType.DateTime), DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]
public DateTime BirthDate
{ get; set; }
}
и у меня есть PartialView, который принимает этот MainModel:
@using (Html.BeginForm("Save", "Controller", FormMethod.Post, new { ReturnUrl = ViewBag.ReturnUrl }))
{
@Html.TextBoxFor(m => m.Name)
@Html.HiddenFor(m => m.Id)
<div id="workers">
@(Html.Kendo().Grid(Model.Foundations[0].Workers)
.Name("grid")
.Columns(columns =>
{
columns.Command(command => { command.Edit().Text("Edit"); command.Destroy().Text("Delete"); }).Width(200);
columns.Bound(p => p.Name);
columns.Bound(p => p.BirthDate).Width(100).Format("{0: dd-MM-yyyy}").EditorTemplateName("BirthDate");
})
.Editable(editable => editable.Mode(GridEditMode.InLine).CreateAt(GridInsertRowPosition.Bottom))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
.Model(model => model.Id(p => p.Id))
.Create(update => update.Action("EditingInline_Create", "Controller"))
.Update(update => update.Action("EditingInline_Update", "Controller"))
.Destroy(update => update.Action("EditingInline_Destroy", "Controller"))
))
</div>
Редактор BirthDate есть что-то вроде этого
@model DateTime
@(
Html.Kendo().DatePickerFor(m=>m).Name("birthDatePicker")
)
модель просто хороша со всеми свойствами и временем. проблема: the model.Foundations [0] .Workers []. Дата рождения имеет действительную дату, но в редакторе шаблонов дается мне datetime с моделью minvalue.
, когда я редактирую столбец, значение, которое появляется, например, будет 01-01-0001 вместо 15-03-2006. OK Я просто меняю дату, но когда я нажимаю Обновить, значение DateTime всегда равно DateTime.Now. В EditingInline_Update параметр «рабочий» изменил значение BrithDate на DateTime.Now ... значение, которое я изменил, нигде.
Я читал где-то, что это может быть проблемой формирования культуры, но я сделал именно так, как они сказали: Создал DateModelBinder и зарегистрировал его в global.asax, но при отладке переданное значение - DateTime.Now ... он уже изменился. У Web.config есть Я изменил текущую культуру потока и UIculture, изменил kendo.culture, проверил в отладке, и все кажется правильным. Я даже поставить яваскрипт валидатора в редакторе:
$("#birthDatePicker").kendoValidator({
rules: {
date: function (input) {
var d = kendo.parseDate(input.val(), "dd-MM-yyyy");
return d instanceof Date;
}
}
});
это возвращает истину, и здесь я могу увидеть дату, я хочу изменить, но когда иду к ModelBinder это как-то меняет в DateTime.Now
I «Прошу прощения за долгое время, но это сводит меня с ума, я не знаю, является ли это ошибкой для коллекций внутри коллекций или если есть что-то еще, что я пропустил. Thanx заблаговременно
Я только что начал использовать EditorTemplates для сетки Kendo. Я обнаружил, что добавление [UIHint = "DateField"] в вашу модель для DateFields, а затем и добавление редактора в «~/Shared/EditorTemplates/DateField» даст рендеринг вашего элемента управления в сетке. –
Thanx Irb, я пробовал это раньше, и это не сработало, но я сделал это снова с самого начала, и теперь это сработало :). Я создавал редактор для каждого атрибута, но теперь я делаю один для каждого типа данных. Единственное, что не работает, - это попытаться разобрать дату в привязке к модели, потому что в строке с попыткой создания значения было время, поэтому я снова настроил код для синтаксического анализа со временем, хотя мне это не нужно. Thanx снова за предложение – user2493175
https://kendoeditortemplate.codeplex.com/ –