C# 获取/设置Kendo treeview节点(Id和文本除外)的属性
我有一个剑道树视图:C# 获取/设置Kendo treeview节点(Id和文本除外)的属性,c#,asp.net,asp.net-mvc,kendo-ui,kendo-treeview,C#,Asp.net,Asp.net Mvc,Kendo Ui,Kendo Treeview,我有一个剑道树视图: @(Html.Kendo().TreeView() .Name("treeview") .BindTo((IEnumerable<TreeViewItemModel>)ViewBag.MyTree) .Events(e => e.Select("treeSelect")) ) 但不是别的 TreeViewItemModel具有以下属性: Checked, Enabled, Encoded, Expanded, HasChildre
@(Html.Kendo().TreeView()
.Name("treeview")
.BindTo((IEnumerable<TreeViewItemModel>)ViewBag.MyTree)
.Events(e => e.Select("treeSelect"))
)
但不是别的
TreeViewItemModel具有以下属性:
Checked, Enabled, Encoded, Expanded,
HasChildren, HtmlAttributes, Id,
ImageHtmlAttributes, ImageUrl, Items,
LinkHtmlAttributes, Selected, SpriteCssClass,
Text, Url
但我无法在javascript中访问这些内容(或者我不知道如何访问)
编辑
以下建议产生下图所示的错误:
children.Add(
new TreeViewItemModel { Id = child.ip.id,
Text = child.ip.mediumDescription,
}.HtmlAttributes(new { data_value1 = "hey" })
)
如果它是模型或ViewBag中的属性,则可以使用树视图上的
HtmlAttributes
传递数据:
@(Html.Kendo().TreeView()
.Name("treeview")
.BindTo((IEnumerable<TreeViewItemModel>)ViewBag.MyTree)
.Events(e => e.Select("treeSelect")
).HtmlAttributes(new { data_value1 = ViewBag.Value1 })
)
这也扩展到行级条目,因为TreeViewItemModel
还具有HtmlAttributes
属性。因此,在行级别检索它们将如下所示:
function treeSelect(e) {
var id = $(e.node).data("id");
var value1 = $(e.node).data('value1');
var text = this.text(e.node);
}
更新
对于特定行,人口如下所示:
function treeSelect(e) {
var id = $(e.node).data("id");
var value1 = $(e.node).data('value1');
var text = this.text(e.node);
}
其语法意味着需要在之后设置自定义数据,即HtmlAttributes.Add(“数据自定义”,“嘿”)代码>
下面是一个简化的示例,它将直接在视图中运行(请注意,这只是为了演示目的,而不是最佳实践)
@{
var data=new List(){
新的TreeViewItemModel{Id=“1”,
Text=“1号”
}
};
data.First().HtmlAttributes.Add(“数据自定义”,“嘿”);
}
@(Html.Kendo().TreeView())
.名称(“树视图”)
.BindTo(数据)
.Events(e=>e.Select(“树选择”)
)
)
功能树选择(e){
var id=$(e.node).data(“id”);
调试器;
var custom=$(e.node).data('custom');
var text=this.text(e.node);
}
上面的简单设置第一项上的数据,您可能也希望迭代并设置预先存在的集合中的值
输出
这难道不会使每个节点的数据值都相同吗?我在寻找类似于children.Add的东西(新的treevievietemmodel{Id=child.ip.Id,Text=child.ip.mediumDescription,Custom=“hey”})代码>否,您可以这样做:children.Add(new TreeViewItemModel{Id=child.ip.Id,Text=child.ip.mediumDescription,Custom=“hey”}.HtmlAttributes(new{Custom=“hey”})
。Custom可以设置为任何值。我将添加到更新中。)javascript变量变为未定义。没有任何名为“custom”的HTML属性,我可以通过将自定义字符串传递到现有的HTML属性(如“animation:whatever”)并捕获另一侧的“whatever”字符串来实现这一点。这是一个解决办法,但我一直在寻找一些看起来不像的东西one@chiapa抱歉,如果您将此添加到前面的数据
中:children.add(新建TreeViewItemModel{Id=child.ip.Id,Text=child.ip.mediumDescription,}.HtmlAttributes(新建{data_custom=“hey”})
它在您的js方法中作为var value1=$(e.node)提供。data('custom');
@chiapa是每行相同的值,或者使用行中的现有数据?只是需要在以后完成,这取决于我的答案更新。
var value1 = $('#treeview').data('value1');
function treeSelect(e) {
var id = $(e.node).data("id");
var value1 = $(e.node).data('value1');
var text = this.text(e.node);
}
@{
var data = new List<TreeViewItemModel>() {
new TreeViewItemModel { Id = "1",
Text = "Number 1"
}
};
data.First().HtmlAttributes.Add("data-custom", "hey");
}
@(Html.Kendo().TreeView()
.Name("treeview")
.BindTo(data)
.Events(e => e.Select("treeSelect")
)
)
<script>
function treeSelect(e) {
var id = $(e.node).data("id");
debugger;
var custom = $(e.node).data('custom');
var text = this.text(e.node);
}
</script>