【发布时间】:2013-06-21 15:36:41
【问题描述】:
我有这个模型:
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>
BirthDate 编辑器有这样的东西
@model DateTime
@(
Html.Kendo().DatePickerFor(m=>m).Name("birthDatePicker")
)
该模型的所有属性和日期时间都很好。 问题是: model.Foundations[0].Workers[].BirthDate 有一个有效的日期,但在模板编辑器中给了我带有 minvalue 模型的日期时间。
当我编辑该列时,显示的值将类似于 01-01-0001 而不是 15-03-2006 例如。 好的,我只是更改日期,但是当我单击更新时,DateTime 的值始终是 DateTime.Now。在 EditingInline_Update 中,参数 'worker' 将 BrithDate 更改为 DateTime.Now...我更改的值不存在。
我在某处读到这可能是一个文化形成问题,但我完全按照他们所说的做了: 创建了一个 DateModelBinder 并在 global.asax 中注册了它,但是在调试时,传递的值是 DateTime.Now...它已经在那里更改了。 Web.config 有 我更改了线程当前文化和 UIculture,更改了 kendo.culture,检查了调试,一切似乎都是正确的。 我什至在编辑器中加入了 javascript 验证器:
$("#birthDatePicker").kendoValidator({
rules: {
date: function (input) {
var d = kendo.parseDate(input.val(), "dd-MM-yyyy");
return d instanceof Date;
}
}
});
这返回 true,在这里我可以看到我想要更改的日期,但是当转到 modelbinder 时,它会以某种方式更改为 DateTime.now
很抱歉,这让我发疯了,我不知道这是否是在集合中包含集合的错误,或者是否还有其他我错过的东西。 提前感谢
【问题讨论】:
-
我刚开始为 Kendo Grid 使用 EditorTemplates。我发现在您的模型中为 DateFields 添加 [UIHint="DateField"] 然后在“~/Shared/EditorTemplates/DateField”处添加一个编辑器将在网格中生成您的控件的呈现。
-
Thanx Irb,我之前尝试过,但没有成功,但我从一开始又做了一次,现在有效:)。我为每个属性制作了一个编辑器,但现在我为每种数据类型制作了一个。唯一不起作用的是尝试在模型绑定器中解析日期,因为尝试的值字符串中有时间,所以我重新安排了代码以随着时间解析,尽管我不需要它。再次感谢您的建议
-
这正是我遇到的问题......由于文化问题,我的日期总是为空......因为我有 en-GB 文化和剑道网格日期时间列总是有默认文化和ny posy 返回值始终为 01/01/0001...dman
标签: asp.net-mvc grid kendo-ui datetimepicker