Javascript 级联组合框在将初始值设置为空后删除模型绑定

Javascript 级联组合框在将初始值设置为空后删除模型绑定,javascript,asp.net,razor,kendo-ui,cascadingdropdown,Javascript,Asp.net,Razor,Kendo Ui,Cascadingdropdown,我的场景: 级联下拉列表以组合框(局部视图)结尾,在剑道网格的主->细节场景中使用 ddl->ddl->ddl->cb 目标: 页面加载下拉列表正在使用数据逐个初始化 使用一些默认值,组合框应保持为空 在网格上,selecteditemchanged局部视图正在填充数据,组合框应显示相应的元素 就我而言,它的工作原理如下: 页面加载组合框显示“0”(我想是null?) 在选择更改时,它会闪烁所选的值,该值基本上是model.Id,并显示适当的文本 或者,如果在加载父DropDownList数据时

我的场景:

级联下拉列表以组合框(局部视图)结尾,在剑道网格的主->细节场景中使用

ddl->ddl->ddl->cb

目标:

  • 页面加载下拉列表正在使用数据逐个初始化 使用一些默认值,组合框应保持为空
  • 在网格上,selecteditemchanged局部视图正在填充数据,组合框应显示相应的元素
  • 就我而言,它的工作原理如下:

  • 页面加载组合框显示“0”(我想是null?)
  • 在选择更改时,它会闪烁所选的,该值基本上是model.Id,并显示适当的文本
  • 或者,如果在加载父DropDownList数据时清除kendoComboBox的文本/值属性:

  • 页面加载组合框为空
  • 在选择更改时,它会像上面一样闪烁,但它保持为空
  • 如果我将ComboBox控件更改为第四个DropDownList,它仍然会“闪烁”,但总的来说效果很好。从模型中选择的项目将正确保留在下拉列表中

    我不能提供一个完整的例子,因为它太重了,但我认为没有必要

    这就是列表数据的级联方式。在父级的数据绑定事件上,调用子级的.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
    }
    
    它看起来像:

  • 每当组合框未填充时,它会直接显示绑定到的模型值(Id),即使模型为空->这是第一个案例中的“0”-我希望它等待数据
  • 如果我将ComboBox的值和/或文本设置为空,它将释放对模型的绑定,并且在填充了数据之后,它不知道应该选择哪个项

  • 解决方案的想法?

    这个解决方案原来很简单,几乎让人尴尬

    我只需要从文本/值(名称/id)对切换到文本/文本,就不再有“闪烁”或消失问题了

    转向:

    进入:

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

    我希望它能为我节省一些时间

    @(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");
                  })
            )
    
    @(Html.Kendo().ComboBox()
                  .Name("ProductId")
                  .DataTextField("Text")
                  .DataValueField("Value")
    
    @(Html.Kendo().ComboBox()
                  .Name("ProductName")
                  .DataTextField("Text")
                  .DataValueField("Text")