我们正在使用Telerik控件实现MVC解决方案 我们在刷新Telerik ComboBox列表时遇到了一些问题。实际上,我们需要在每次更改另一个ComboBox中选择的值时刷新ComboBox的可用值列表。以下是我们的情景:
实际上它运行正常,但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
}
答案 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。