0

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

  • Main ComboBox 有一个字符串值列表,我们添加了一个事件;
  • Detail ComboBox 有一个值列表,取决于从 Main ComboBox 中选择的内容;
  • 当 Main 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
}
4

1 回答 1

0

我不认为用 ViewData 更新第二个组合框将在以下情况下起作用:

.BindTo((IEnumerable)ViewData["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")
    )

有关工作示例,请参阅此链接

于 2015-06-24T08:56:49.873 回答