从另一个组合框中刷新Telerik Combobox列表

时间:2015-06-24 08:37:41

标签: javascript asp.net-mvc combobox telerik telerik-combobox

我们正在使用Telerik控件实现MVC解决方案 我们在刷新Telerik ComboBox列表时遇到了一些问题。实际上,我们需要在每次更改另一个ComboBox中选择的值时刷新ComboBox的可用值列表。以下是我们的情景:

  • Main ComboBox有一个字符串值列表,我们添加了一个事件;
  • 详细信息ComboBox有一个值列表,这些值取决于从Main ComboBox中选择的内容;
  • 当主要ComboBox上的事件被触发时,javascript在Controller中调用一个动作;
  • 控制器刷新List02的内容(ComboBox02中绑定的数据源)

实际上它运行正常,但Detail ComboBox不刷新。有什么不对或错过了?

非常感谢您的帮助

主要组合框:

<%=Html.Kendo().DropDownListFor(ourModel => ourModel.ModelPK)
    .HtmlAttributes(new { @class="textboxDetails" })
    .Name("combo01")
    .BindTo((IEnumerable<ModelObject>)ViewData["List01"])
    .DataTextField("descriptionText")
    .DataValueField("valueID")
    .Value(ourModel.ModelPK.ToString())
    .Events(e =>
                {
                    e.Select("onSelect");
                })
%>

详细信息组合:

<%=Html.Kendo().DropDownListFor(ourModel => ourModel.secPK)
    .HtmlAttributes(new { @class="textboxDetails" })
    .Name("combo02")
    .BindTo((IEnumerable<ModelObject>)ViewData["List02"])
    .DataTextField("descriptionText")
    .DataValueField("valueID")
    .Value(ourModel.Model02PK.ToString())
%>

aspx页面上的Javascript:

function onSelect(e) {
    var dataItem = this.dataItem(e.item);
    var itemPK = dataItem.valueID;

    $.ajax({
        type: 'POST',
        url: '/controller01/action01',
        data: "{'sentPK':'" + sentPK + "'}",
        contentType: 'application/json; charset=utf-8',

        success: function (result) {

        },
        error: function (err, result) {
            alert("Error" + err.responseText);
        }

    });

}

控制器操作:

[AcceptVerbs(HttpVerbs.Post)]
public void action01(model01 editModel, int sentPK)
{
    //View data loads correctly
}

1 个答案:

答案 0 :(得分:0)

我认为使用ViewData更新第二个组合框将不适用于场景:

  

.BindTo((IEnumerable的)计算机[ “List01”])

第一次呈现页面时,ViewData对象中存储的值用于填充组合框,然后onSelect您正在做的就是对服务器进行AJAX调用。服务器更新ViewData对象,但由于组合框已经加载了初始数据,因此不会使用新数据刷新它。

您必须在第一个组合框的选择更改事件上刷新第二个组合框。 选项1:

onSelect()成功中添加以下行:

var combobox = $("#combo02").data("kendoComboBox");
combobox.dataSource.data(result);

选项2:

将第二个组合框的数据源与服务器绑定:

    @(Html.Kendo().ComboBox()
          .Name("products")
          .HtmlAttributes(new { style = "width:300px" })
          .Placeholder("Select product...")
          .DataTextField("ProductName")
          .DataValueField("ProductID")
          .Filter(FilterType.Contains)
          .DataSource(source => {
              source.Read(read =>
              {
                  read.Action("GetCascadeProducts", "ComboBox")
                      .Data("filterProducts");
              })
              .ServerFiltering(true);
          })
          .Enable(false)
          .AutoBind(false)
          .CascadeFrom("categories")
    )

有关工作示例,请参阅此link