【问题标题】:Cascading ComboBox drops model binding after setting initial value empty级联组合框在将初始值设置为空后丢弃模型绑定
【发布时间】:2014-01-31 14:59:51
【问题描述】:

我的场景:

以组合框(部分视图)结尾的级联下拉列表,用于主->带有剑道网格的详细信息场景

ddl->ddl->ddl->cb

目标:

  1. 在页面加载时 DropDownLists 正在用数据一一初始化 具有一些默认值,并且 ComboBox 应保持为空
  2. 在网格上 selecteditemchanged 部分视图正在填充数据,ComboBox 应显示适当的元素。

就我而言,它的工作原理如下:

  1. 在页面加载时 ComboBox 显示 '0'(我想是 null?)
  2. 在选择更改时,它会闪烁选定的 value,基本上是 model.Id,它会显示适当的 text

或者,如果我在加载父 DropDownList 数据时清除了 kendoComboBox 的 text/value 属性:

  1. 页面加载时 ComboBox 为空
  2. 在选择更改时,它会像上面一样闪烁,但它保持为空

如果我将 ComboBox 控件更改为第 4 个 DropDownList,它仍然会“闪烁”,但总的来说一切正常。从模型中选择的项目正确地保存在下拉菜单中。

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

这就是列表数据的级联方式。在父级的 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) 的模型值,即使模型为空 -> 这是第一种情况下的“0” - 我希望它等待数据李>
  2. 如果我将 ComboBox 的 value 和/或 text 设置为空,它将失去与模型的绑定,并且在填充数据后它不知道应该是哪个项目选择...

解决方案的想法?

【问题讨论】:

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


    【解决方案1】:

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

    我只需要从 text/value (name/id) 对切换到 text/text 并且不再有“闪烁”或消失问题。

    转弯:

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

    进入:

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

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

    我希望它可以为那些本来可以为我节省一些时间的人节省时间......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-30
      • 2013-03-01
      • 2012-08-19
      • 1970-01-01
      • 2016-09-24
      • 1970-01-01
      相关资源
      最近更新 更多