0

我有一個KendoUI網格,它允許用戶使用內聯模式更新值。問題是,我有兩個屬性不允許空值,但不過NumericTextBox給我設置爲空值,然後接受它,因爲你可以在下面的圖片中看到:MVC KendoUI:如何禁用NumericTextBox允許空值?

enter image description here

如果按下「Aceptar」(「Accept」)按鈕,輸入保持爲空,但它會在數據庫中保存「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爲空?

回答

0

感謝大傢伙!我通過在屬性上使用「必需」裝飾器來解決它。

[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,你必須編寫它。

enter image description here

+0

您應該立即接受您自己的問題,以防止它顯示爲未解決。 –

+0

你是對的Bruno ...對不起! –

1

數字文本框中.Value的工具提示說「設置文本框的初始值」。所以這看起來像爲什麼它在數據庫中保存0。

根據我的評論,你可能實際上必須做這樣的事情。

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

numerictextbox.value(0); 
+0

的問題是不是在數據庫上加載0的事實,主要的問題是,是不是說明你這個0,直到你刷新頁面。 –

+0

嘗試給數字tb一個Id並在jquery中做這個'$(「#Id」)。val(0)'應該在其中拋出一個0 – CSharper

+0

我不能這麼做,因爲Kendo在調用兩個時有一個錯誤或具有相同ID的更多元素。正如你所看到的,我在UIHint上定義了模板,所以我不能使用.Name(「id」),因爲它應該調用div上的相同ID的兩個元素。你明白嗎?不管怎麼說,還是要謝謝你! –

相關問題