【问题标题】:Kendo MVC DatePicker Not Setting ValueKendo MVC DatePicker 未设置值
【发布时间】:2013-12-04 18:39:20
【问题描述】:

我在这里按照示例进行操作:http://demos.kendoui.com/web/datepicker/rangeselection.html

这是我在 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>

我在 KendoUI 网格中使用 EditorTemplate,该网格有一个处于弹出模式的创建按钮。问题是当我查看弹出窗口时,EndDate 选择器的初始默认值始终设置为当前日期,即使当我查看页面源内部时,DatePicker 的“值”属性设置为我的未来日期:

value=\"2013-12-06\"

为什么无论我传递给它的值如何,DatePicker 中显示的默认值总是当前日期?

【问题讨论】:

  • 我不明白。您将结束日期设置为当前日期后两天。那应该是你看到的日期,不是吗?
  • 正确,我将结束日期设置为当前日期后两天,但是当弹出窗口出现时,当前日期是日期选择器中的选定值。就好像它忽略了传入的值。
  • 好的,你的意思是结束日期是当前日期,而不是当前日期后两天?

标签: asp.net-mvc kendo-ui kendo-asp.net-mvc


【解决方案1】:

想通了。事实证明,kendo 会自行初始化新的底层模型,并且会覆盖 datepicker 中设置的任何默认值。由于我表单中的日期字段不可为空,因此默认情况下将它们初始化为当前日期。为了告诉 kendo 新创建的模型的替代默认值,我必须修改网格中的数据源属性(生成弹出表单)。

.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"))
      )

【讨论】:

    【解决方案2】:

    我会在你的控制器/动作方法中设置默认值,类似于:

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

    然后去掉DatePickerFor上的.Value(DateTime.Now.AddDays(2))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多