2013-12-04 3 views
1

Я следую примеру здесь: http://demos.kendoui.com/web/datepicker/rangeselection.htmlКендо MVC DatePicker Не Установленное значение

Вот как я определяю свои поля внутри от EditorTemplate:

<div class="editor-label"> 
    @Html.RequiredLabelFor(model => model.StartDate) 
</div> 
<div class="editor-field"> 
    @Html.Kendo().DatePickerFor(model => model.StartDate).Value(DateTime.Now).Max(DateTime.Now.AddDays(2)).Events(e => e.Change("startChange")) 
    @Html.ValidationMessageFor(model => model.StartDate) 
</div> 

<div class="editor-label"> 
    @Html.RequiredLabelFor(model => model.EndDate) 
</div> 
<div class="editor-field"> 
    @Html.Kendo().DatePickerFor(model => model.EndDate).Value(DateTime.Now.AddDays(2)).Min(DateTime.Now).Events(e => e.Change("endChange")) 
    @Html.ValidationMessageFor(model => model.EndDate) 
</div> 

Я использую EditorTemplate в пределах Сетка KendoUI, которая имеет кнопку создания, которая находится в режиме всплывающего окна. Проблема в том, что когда я просматриваю всплывающее окно, начальное значение по умолчанию для элемента выбора EndDate всегда устанавливается на текущую дату, хотя, когда я просматриваю источник страницы, атрибут «значение» для DatePicker устанавливается на мою будущую дату :

value=\"2013-12-06\" 

Почему значение по умолчанию, отображаемое в DatePicker, всегда текущая дата независимо от значения, которое я передаю ему?

+0

Я не понимаю. Вы устанавливаете дату окончания на два дня после текущей даты. Это должна быть дата, которую вы видите, не так ли? – ataravati

+0

Правильно, я устанавливаю дату окончания через два дня после текущей даты, однако, когда появляется всплывающее окно, текущая дата является выбранным значением в datepicker. Это как если бы оно игнорировало прошедшую ценность. – Pete

+0

ОК, вы имеете в виду, что дата окончания - это текущая дата, а не через два дня после текущей даты? – ataravati

ответ

3

Фигурные его. Оказывается, что kendo самостоятельно инициализирует новую базовую модель, и она переопределит любое значение по умолчанию, установленное в datepicker. Так как поля даты в моей форме не имели значения NULL, они инициализировали их по умолчанию текущей датой. Чтобы сообщить kendo альтернативное значение по умолчанию для вновь созданных моделей, мне пришлось изменить свойство datasource в сетке (которое порождает всплывающее окно).

.DataSource(dataSource => dataSource 
       .Ajax() 
       .Sort(sort => sort.Add(s => s.RunDate).Descending()) 
       .Model(model => 
        { 
         model.Id(c => c.Id); 
         //These next 3 lines tell kendo the default values to use 
         //when creating a new model. This fixed my problem. 
         model.Field(c => c.EndDate).DefaultValue(DateTime.Today.AddDays(7)); 
         model.Field(c => c.StartDate).DefaultValue(DateTime.Today); 
         model.Field(c => c.RunDate).DefaultValue(DateTime.Today); 
        }) 
       .Events(events => events.Error("error")) 
       .Create(create => create.Action("Create", "MyController")) 
       .Read(read => read.Action("Read", "MyController")) 
       .Destroy(update => update.Action("Destroy", "MyController")) 
    ) 
+0

Хороший пример :) – Amit

0

Я бы установить по умолчанию в вашем методе контроллер/действие, похожее на это:

public ActionResult() 
{ 
    var model = new MyViewModel 
    { 
     EndDate = DateTime.Now.AddDays(2) 
    } 

    return View(model); 
} 

, а затем избавиться от .Value(DateTime.Now.AddDays(2)) на DatePickerFor

Смежные вопросы