나는이 모델이 있습니다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")
)
같은 무언가가를
모델은 모든 속성과 datetimes로 잘됩니다. 문제 : model.Foundations [0] .Workers []. BirthDate에 유효한 날짜가 있지만 템플릿 편집기에서 minvalue 모델과 함께 datetime을 제공합니다.
열을 편집 할 때 표시되는 값은 15-03-2006 대신 01-01-0001과 같습니다. OK 날짜 만 변경하지만 업데이트를 클릭하면 DateTime 값은 항상 DateTime.Now입니다. EditingInline_Update에서 'worker'매개 변수가 BrithDate를 DateTime으로 변경했습니다. 이제 ... 변경 한 값이 없습니다.
어쨌든 이것은 문화를 형성하는 문화 일 수 있지만 정확히 말했듯이 나는 DateModelBinder를 만들고 global.asax에 등록했지만 디버그 중에 전달 된 값은 DateTime.Now ...입니다. 그것은 이미 바뀌 었습니다. Web.config에 이 있습니다. 스레드 현재 culture와 UIculture를 변경하고 kendo.culture를 변경하고 디버그를 체크하고 모든 것이 옳은 것 같습니다. 이 true를 반환하고 여기에 내가 변경하고자하는 날짜를 볼 수 있습니다
$("#birthDatePicker").kendoValidator({
rules: {
date: function (input) {
var d = kendo.parseDate(input.val(), "dd-MM-yyyy");
return d instanceof Date;
}
}
});
을하지만 어떻게 든
I DateTime.now에 변화 ModelBinder를가는 경우 : 난 편집기에서 자바 스크립트 유효성 검사기를 넣어 오랫동안 유감 스럽지만 미쳐 버렸습니다. 컬렉션에 컬렉션이 있거나 컬렉션에 놓친 버그가 있는지 알 수 없습니다. 미리 고지
방금 Kendo Grid 용 EditorTemplates를 사용하기 시작했습니다. 나는 당신의 모델에서 DateFields를위한 [UIHint = "DateField"]를 추가하고 "~/Shared/EditorTemplates/DateField"에 편집기를 추가하면 그리드에서 컨트롤의 렌더링을 얻을 수 있다는 것을 알게되었습니다. –
고맙습니다. Irb, 이전에 시도했지만 작동하지 않았지만 처음부터 다시 시도했지만 지금은 작동했습니다. :) 각 속성에 대한 편집기를 만들었지 만 지금은 각 데이터 유형에 대해 편집기를 만들고 있습니다. 작동하지 않는 유일한 방법은 시도한 값 문자열에 시간이 있기 때문에 모델 바인더에서 날짜를 파싱하려고 했으므로 시간이 필요하지는 않지만 코드를 다시 파싱했습니다. 고맙다는 제안을 다시 – user2493175
https://kendoeditortemplate.codeplex.com/ –