2014-01-31 30 views
0

我的情况下结合:级联组合框滴模型设定空初始值后

级联与主 - 使用组合框(局部视图)>结束的下拉列表中详述了剑术电网场景

ddl-> ddl- > ddl-> CB

目标:

  1. 在页面加载DropDownLists正在用数据逐个初始化 并带有一些默认值,组合框应保持为空
  2. 在网格上selecteditemchanged部分视图正在填充数据,而ComboBox应显示相应的元素。

在我的情况下,它的工作原理如下:

  1. 在页面加载组合框显示“0”(?空我想)
  2. 它与选定闪烁选择的变化基本上是model.Id它表明适当文本

或者,如果I C李尔文本/值属性格式kendoComboBox当父母的DropDownList数据加载:

  1. 在页面加载组合框是选择空
  2. 改变它闪烁像上面,但其保持为空

如果我将组合框控件更改为第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. 每当组合框未填充它显示它被绑定到直接模式的值(标识),即使模型是空的 - >多数民众赞成在'0'从第一种情况 - 我希望它等待数据
  2. 如果我设置和/或文本空组合框空它失去绑定到模型,并且它填充数据后它不知道应该选择哪个项目...

解决方案的想法?

回答

0

的解决方案竟然是如此简单,它几乎令人尴尬......

我刚刚从文本/值(名称/ ID)对切换到文本/文本并没有“眨眼“或失踪问题。

转到:

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

到:

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

它会导致控制器一些额外的工作,但至少工作。

我希望这样可以节省时间,有人喜欢它可能有救了我一些...