【发布时间】:2015-07-31 10:31:02
【问题描述】:
我正在使用 Telerik Extensions for MVC。
我有一个 TreeView 并想使用它:
- 打开站点时仅显示根元素,并在扩展时使用 Ajax 按需加载子元素 - 这很有效!
- 搜索节点,然后重新绑定树宽结果数据。
我无法让第 2 点起作用。一些代码:
查看:
@(Html.Telerik().TreeView()
.Name("OuTree")
.DataBinding(dataBinding =>
{
dataBinding.Ajax()
.Enabled(true)
.Select("NodePreview", "OrganizationalStructure");
})
)
控制器上第 1 点的扩展方法(有效!)
public JsonResult NodePreview(int? Value)
{
int nodeId = Value.HasValue == false ? 0 : Value.Value;
var request = OrganizationTreeNodeRequestCreate(nodeId);
var service = _ProductSetupService;
var response = service.OrganizationTreeNodeGet(request);
var tree = from ou in response.Children
select new
{
Value = ou.Id,
Text = ou.OrganizationUnit.Name,
LoadOnDemand = ou.Subordinates.Count > 0
};
return Json(tree, JsonRequestBehavior.AllowGet);
}
现在是困难的部分。 我希望能够搜索节点,然后用结果数据重新绑定树。 我已经有一个返回层次结构的搜索服务。问题在于绑定。
第 2 点的控制器操作:
public JsonResult Search(SearchModel model)
{
var request = OrganizationTreeSearchRequestCreate(model);
var service = _ProductSetupService;
var response = service.OrganizationTreeSearch(request);
var treeViewItem = new TreeViewItem();
treeViewItem.BindTo(response.Results, mappings =>
{
mappings.For<OrganizationUnitTree>(binding => binding
.ItemDataBound((item, group) =>
{
item.Text = group.OrganizationUnit.Name;
item.Value = group.Id.ToString();
item.LoadOnDemand = true;
})
.Children(group => group.Subordinates));
});
return Json(treeViewItem, JsonRequestBehavior.AllowGet);
}
然后在客户端:
function ReloadTree(data) {
var treeview = $('#OuTree').data('tTreeView');
treeview.dataBind(data);
}
但是dataBind不起作用。
感谢您的帮助。
【问题讨论】: