有没有办法在回发后将ASP.Net TreeView的选定节点滚动到视图中?
在我的特定场景中,每次回发后都会重新填充控件。
谢谢!
答案 0 :(得分:4)
我明白了。 TreeView控件在客户端上创建一个javascript对象。它被命名为你所谓的树视图,附加一个'_Data'。该对象允许您获得对所选节点的引用。
下面的代码使用ASP.Net Ajax扩展。只需记住将TreeView名称更改为您称之为的名称。
var name = myTreeView_Data.selectedNodeID.value;
var selectedNode = $get(name);
if(selectedNode)
{
selectedNode.scrollIntoView(true);
}
答案 1 :(得分:2)
这是树视图的解决方案,当点击特定树节点时它只是滚动到页面的关注标题(不是重定向),为此我们有简单的HTML代码,现在我们看到它是什么..
<html>
<body>
<div id="sidebar">
<ul>
<li><a href="#contacts" >Contact</a></li>
/***here is the link*****/`
</ul>
</div>
<div style="height: 250px;" id="contacts">
/*here your content*/
</div>
</body>
</html>
答案 2 :(得分:1)
我使用了保罗的方法,它对我有用。我在用户控件内的更新面板中有一个TreeView
,在每个PreRender
期间重建。一旦TreeView
构建,我就运行以下命令。
if (Page.IsPostBack)
{
string s2 = @"var elem = document.getElementById('{0}_SelectedNode');
if(elem != null )
{
var node = document.getElementById(elem.value);
if(node != null)
{
node.scrollIntoView(true);
}
}
";
ScriptManager.RegisterStartupScript(this, this.GetType(), "myscript", s2.Replace("{0}", tvOrgChart.ClientID), true);
}
信用转到Paul Kimmel
答案 3 :(得分:0)
您还可以使用以下代码:
var elem = document.getElementById('TreeView1_SelectedNode');
if(elem != null )
{
var node = document.getElementById(elem.value);
if(node != null)
{
node.scrollIntoView(true);
}
}
信用转到Paul Kimmel
答案 4 :(得分:0)
将此方法添加到您的代码后面。它对我有用。将treeView替换为treeView控件的ID。
protected override void OnPreRender(EventArgs e) {
//return some code to run on the client
string jsScript = @"
<script language=javascript>
function Tree_scrollIntoView() {
var data = " + treeView.ClientID + @"_Data;
if (!data) {
return;
}
if ((typeof(data.selectedClass) != ""undefined"") && (data.selectedClass != null)) {
var id = data.selectedNodeID.value;
if (id.length > 0) {
var selectedNode = document.getElementById(id);
if ((typeof(selectedNode) != ""undefined"") && (selectedNode != null)) {
selectedNode.scrollIntoView(true)
}
}
}
}
$(document).ready(function () {
Tree_scrollIntoView();
});
</script>";
string jsScriptKey = "Scroll_treeview_to_selected";
if (!Page.ClientScript.IsStartupScriptRegistered(this.GetType(), jsScriptKey)) {
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), jsScriptKey, jsScript);
}
base.OnPreRender(e);
}