我有这样的模式:MVC4剑道电网日期时间模板编辑器
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; }
}
和我有收到这个MainModel一个partialView:
@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>
出生日期编辑器有这样的事情
@model DateTime
@(
Html.Kendo().DatePickerFor(m=>m).Name("birthDatePicker")
)
该模型与所有的属性和日期时间都很好。 问题是: model.Foundations [0] .Workers []。BirthDate有一个有效的日期,但在模板编辑器给我的日期时间minvalue模型。
当我编辑列时,出现的值将像01-01-0001而不是15-03-2006例如。 好吧我只是改变日期,但当我点击更新日期时间的值始终是DateTime.Now。在EditingInline_Update中,参数'worker'将BrithDate更改为DateTime.Now ...我更改的值不存在。
我在某处读到这可能是文化格式化问题,但我完全按照他们的说法: 创建DateModelBinder并将其注册到global.asax中,但在调试时,传递的值是DateTime.Now ...它已经改变了。 Web.config有 我改变了线程当前的文化和UI文化,改变了kendo.culture,在调试中检查了一切似乎是正确的。 我甚至把验证的JavaScript编辑器中:
$("#birthDatePicker").kendoValidator({
rules: {
date: function (input) {
var d = kendo.parseDate(input.val(), "dd-MM-yyyy");
return d instanceof Date;
}
}
});
返回true,在这里我可以看到我想要更改日期,但如果去它在某种程度上变为DateTime.now
我的模型绑定器对不起,但是这让我发疯,我不知道这是否是藏品内藏品的缺陷,或者是否有其他我错过的东西。 Thanx提前
我刚开始使用Kendo Grid的EditorTemplates。我发现在DateFields的模型中添加[UIHint =“DateField”],然后在“〜/ Shared/EditorTemplates/DateField”处添加一个编辑器将会在网格中生成控件的渲染。 –
Thanx Irb,我曾尝试过,它没有工作,但我从一开始就做到了,现在它工作:)。我为每个属性编辑一个编辑器,但现在我为每个数据类型创建一个。唯一不起作用的是试图解析模型联编程序中的日期,因为尝试的值字符串中有时间,所以我重新安排了代码以便随时分析,尽管我不需要它。 Thanx再次的建议 – user2493175
https://kendoeditortemplate.codeplex.com/ –