Kendo MVC NumericTextBox为默认值,不绑定到模型

时间:2016-05-26 03:18:43

标签: javascript c# asp.net-mvc kendo-asp.net-mvc

JobPlanViewModel

public class JobPlanViewModel : IMapFrom<JobPlan>, IJobPlan
{
  ...
  [Display(Name = "Duration")]
  public decimal Duration { get; set; }
  ...
}

我的剑道网格

@(Html.Kendo().Grid<JobPlanViewModel>()
      ...
      .Editable(editable => editable.Mode(GridEditMode.PopUp)
      .TemplateName("AdminJobPlanJobFormEditor")
      .Window(w => { w.Title(""); })
      .DisplayDeleteConfirmation(false))
      ...

      .Update(update => update.Action("JobPlanGrid_Update", "JobPlan", new { area = "AdminJobPlan" }))
)

AdminJobPlanJobFormEditor.cshtml

@model DefaultViewModel.JobPlanViewModel
@using Kendo.Mvc.UI
...
<div class="col-md-8 col-xs-12">
    @(Html.Kendo().NumericTextBoxFor(model => model.Duration)
    .Value(0.1m)
    .Step(0.1m)
    .Min(0.1m).Decimals(1).Format("N1")
    .HtmlAttributes(new { style = "width: 100%; padding: 0px;", required = "required" }))
    @Html.ValidationMessageFor(model => model.Duration)
</div>

我有一个使用弹出编辑模式的Kendo MVC Grid,带有cshtml模板。

在该模板中,我有一个Kendo MVC Numerictextbox对于duration字段,我想将其默认值设置为0.1,当用户点击“保存”时,该值应该发布到服务器端操作{ {1}}即使他不编辑JobPlanGrid_Update字段

在用户界面中,一切似乎都没问题,当弹出编辑窗口时,默认值0.1显示在文本框中,最小值,步长值都没问题,但是当我点击“保存”时,我发现{{如果我没有手动编辑duration,则发布的字段始终为0。

我已经设置了Grid的Datasource parameterMap。通过编写duration,我发现当它进行映射时(在网格向duration发送请求之前),console.log()已经为0,这超出了我的预期。 / p>

我做错了什么,我怎样才能实现我想要的目标?谢谢!

EDITED

我的完整网格是这样的:

JobPlanGrid_Update

对不起格式化,我不知道为什么shift + tab会清除所有缩进而不是清除一个标签....

1 个答案:

答案 0 :(得分:1)

您尚未完全发布网格,因此我只需假设它使用Ajax绑定。

这是因为剑道网格的工作方式。我以前遇到过类似的问题。例如,如果您尝试使用jquery更改弹出编辑器上的输入值,您将看到更改的值不会发布到您的控制器(该值不会在网格的数据源中更改),除非您在更改其值后显式触发输入的更改事件。

无论如何,您正在做的不是为网格中的属性设置默认值的正确方法。在网格的数据源中,您应该这样做:

.DataSource(dataSource => dataSource
    .Ajax()
    .Model(m => m.Field(f => f.Duration).DefaultValue(0.1M))
    // other configurations...
)