【问题标题】:MVC KendoUI: how to disable NumericTextBox allowing an empty value?MVC KendoUI:如何禁用允许空值的 NumericTextBox?
【发布时间】:2014-02-20 14:39:41
【问题描述】:

我有一个 KendoUI 网格,它允许用户使用内联模式更新值。问题是我有两个不允许空值的 double 属性,但是 NumericTextBox 让我设置一个空值,然后接受它,如下图所示:

如果按“Aceptar”(“接受”)按钮,输入保持为空,但它在数据库中保存“0”,并且只有在刷新页面时才能看到它。 这是网格的代码:

 @(Html.Kendo().Grid<ReferenceThresholdVM>()
                .Name("grdReference")
                .Columns(columns =>
                    {
                        columns.Bound(t => t.txbTransponderName).Title("Transponder").Width(120);
                        columns.Bound(t => t.txbDataSourceName).Title("Variable").Width(200);
                        columns.ForeignKey(t => t.ddlReferenceTypeId, ReferenceTypeVM.GetComboList(), "Id", "Description").Title("Modo").Width(110);
                        columns.Bound(t => t.ntbThreshold).Title("Umbral").Width(100);
                        columns.Bound(t => t.ntbCurrentValue).Title("Valor de referencia").Format("{0:n2}").Width(170);
                        columns.Bound(t => t.ntbHysteresis).Title("Histeresis").Format("{0:n2}").Width(100);
                        columns.Bound(t => t.ntbThresholdTrigger).Title("Umbral de disparo").Format("{0:n2}").Width(150);
                        columns.Command(command =>
                                           {
                                               command.Edit().CancelText("Cancelar").UpdateText("Confirmar"); 
                                               command.Destroy();
                                           }).Width(220).HtmlAttributes(new { style = "text-align: center;" });
                                   })
                .Editable(editable => editable.Mode(GridEditMode.InLine))
                .Pageable()
                .Navigatable()
                .Sortable()
                .Events(e => e.Save("onSave"))
                .DataSource(dataSource => dataSource
                    .Ajax()
                    .PageSize(12)
                    .ServerOperation(false)
                    .Events(events => events.Error("error_handler"))
                    .Model(model =>
                        {
                            model.Id(t => t.Id);
                            model.Field(t => t.Id);
                            model.Field(t => t.txbTransponderName).Editable(false);
                            model.Field(t => t.txbDataSourceName).Editable(false);
                            model.Field(t => t.ddlReferenceTypeId);
                            model.Field(t => t.ntbThreshold);
                            model.Field(t => t.ntbHysteresis);

                            model.Field(t => t.ntbCurrentValue).Editable(false);
                            model.Field(t => t.ntbThresholdTrigger).Editable(false);

                        })
                    .Read(read => read
                        .Action("Read_Reference", "Reference")
                        .Data("getFilterReference")
                    )
                    .Update("Reference_Update", "Reference")
                    .Destroy("Reference_Destroy", "Reference")
                )
                .Events(events => events.DataBound("onGrdReferenceDataBound"))
                .AutoBind(false)
              )

每个属性都是通过使用为输入定义某些行为的 UIHint 以这种方式定义的:

[Display(Name = "Umbral")]
[UIHint("PositiveNumber")]
public double ntbThreshold
{
    get;
    set;
}

[Display(Name = "Histeresis")]
[UIHint("PositiveNumber")]
public double ntbHysteresis
{
    get;
    set;
}

最后这是 UIHint "PositiveNumber" 的代码:

@model int?

@(Html.Kendo().NumericTextBoxFor(m => m)
      .HtmlAttributes(new { @class = "k-numerictextbox" })
      .Min(0)
      .Max(int.MaxValue)
      .Value(0)
)

有没有办法消除让 NumericTextBox 为空的可能性?

【问题讨论】:

    标签: asp.net-mvc model-view-controller kendo-ui kendonumerictextbox


    【解决方案1】:

    数字文本框上 .Value 的工具提示说,“设置文本框的初始值”。所以这看起来像为什么它在数据库中保存 0。

    根据我的评论,您实际上可能必须做这样的事情。

    var numerictextbox = $("#numerictextbox").data("kendoNumericTextBox");
    
     numerictextbox.value(0);
    

    【讨论】:

    • 问题不在于在数据库上加载 0,主要问题是在刷新页面之前不会显示这个 0。
    • 尝试给 Numeric tb 一个 Id 并在 Jquery 中执行此操作 $("#Id").val(0) 应该在其中抛出一个 0
    • 我不能这样做,因为当您调用具有相同 id 的两个或多个元素时,Kendo 会出现错误。正如你所看到的,我在 UIHint 上定义了模板,所以我不能使用 .Name("id") 因为它应该在 div 上调用具有相同 id 的两个元素......你明白吗?还是谢谢!
    • 是的,任何框架都不能有两个 id。 ...所以换个名字?
    • 视图中没有。将 .HtmlAttributes(new { @class = "k-numerictextbox" }) 更改为 id。语法是 @id = "w.e" 或者只是 id = "w.e"
    【解决方案2】:

    谢谢大家!我通过在属性上使用“必需”装饰器来解决它。

        [Required] /*this is the important thing!*/
        [Display(Name = "Umbral")]
        [UIHint("PositiveNumber")]
        public double? ntbThreshold
        {
            get;
            set;
        }
    
        [Required]
        [Display(Name = "Histeresis")]
        [UIHint("PositiveNumber")]
        public double? ntbHysteresis
        {
            get;
            set;
        }
    

    所以现在,当您尝试设置一个空值时,它会显示一个验证错误。所以如果你想在 NumericTextBox 上设置一个 0,你必须写它。

    【讨论】:

    • 您应该立即接受自己的问题,以防止它显示为未解决。
    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2017-12-06
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2013-01-05
    • 2017-01-27
    相关资源
    最近更新 更多