将初始值设置为空后,级联ComboBox会丢弃模型绑定

时间:2014-01-31 14:59:52

标签: javascript asp.net razor kendo-ui cascadingdropdown

我的情景:

使用ComboBox结束的级联下拉列表(局部视图)在master->详细信息场景中使用了剑道网格

ddl-> ddl-> ddl-> CB

目标:

  1. 在页面加载DropDownLists正在逐个初始化数据 具有一些默认值,并且ComboBox应保持为空
  2. 在网格上,selecteditemchanged部分视图正在填充数据,ComboBox应显示相应的元素。
  3. 在我的情况下,它的工作原理如下:

    1. on page load ComboBox显示'0'(我想是null?)
    2. 选择更改后,它会闪烁选择,这基本上是 model.Id ,并显示相应的文字
    3. 或者,当我加载父DropDownList数据时,如果我清除 text / value 的kendoComboBox属性:

      1. 页面加载ComboBox为空
      2. 在选择更改时,它会像上面一样闪烁,但它会保持空白
      3. 如果我将ComboBox控件更改为第4个DropDownList,它仍然会“闪烁”,但总的来说一切正常。模型中的选定项目在DropDown中正确保存。

        我无法提供一个完整的例子,因为它太重了但我认为没必要。

        这就是列表数据的级联方式。在父级的DataBound事件中调用子级的.dataSource.read()方法。没什么好看的。

        function ParentProductIdDataBound() {
            var dropdownlist = $("#ParentProductId").data("kendoDropDownList");
        
            if (dropdownlist.value()) {
                OnParentProductIdChange();
            }
        }
        
        function ParentProductIdChange() {
            OnParentProductIdChange();
        }
        
        function OnParentProductIdChange() {
            var productcombobox = $("#ProductId").data("kendoComboBox");
            productcombobox.text("");     <- empty until combo is populated
            productcombobox.value("");
            productcombobox.enable(true);  <- enable combo
            productcombobox.dataSource.read();  <- populate combo
        }
        

        这是组合本身的代码

        @(Html.Kendo().ComboBox()
                      .Name("ProductId")
                      .DataTextField("Text")
                      .DataValueField("Value")
                      .AutoBind(false)
                      //.Text(Model.ProductId == 0 ? " " : Model.ProductName)
                      .DataSource(source =>
                      {
                          source.Read(read =>
                          {
                              read.Action("GetMeansOfProduction", "DemandForMeansOfProduction", new { level = 3 }).Data("onProductComboBoxAdditionalData");
                          })
                                .ServerFiltering(false);
                      })
                      .Events(e =>
                      {
                          e.Change("ProductIdChange");
                          e.DataBound("ProductIdDataBound");
                      })
                )
        

        看起来像:

        1. 每当未填充ComboBox时,它会直接显示绑定到的模型值(Id),即使模型为空 - &gt;这是第一种情况下的'0' - 我希望它等待数据
        2. 如果我将ComboBox的和/或 text 设置为空,则会丢失对模型的绑定,并且在填充数据后,它不知道应该是哪个项目选择...
        3. 解决方案的想法?

1 个答案:

答案 0 :(得分:0)

解决方案结果如此简单,几乎令人尴尬......

我只需要从 text / value (name / id)对切换到 text / text ,并且不再有'眨眼'或消失问题。< / p>

转到:

@(Html.Kendo().ComboBox()
              .Name("ProductId")
              .DataTextField("Text")
              .DataValueField("Value")

成:

@(Html.Kendo().ComboBox()
              .Name("ProductName")
              .DataTextField("Text")
              .DataValueField("Text")

它会在控制器中引起一些额外的工作,但至少可以工作。

我希望能节省时间给某些人,比如它本可以救我一些......