有没有办法在回发后将 ASP.Net TreeView 的选定节点滚动到视图中?
在我的特殊情况下,每次回发后都会重新填充控件。
谢谢!
我想到了。TreeView 控件在客户端上创建一个 javascript 对象。它被命名为附加了“_Data”的树视图。该对象使您可以获取对选定节点的引用。
下面的代码使用 ASP.Net Ajax 扩展。只要记住将 TreeView 名称更改为您的名称即可。
var name = myTreeView_Data.selectedNodeID.value;
var selectedNode = $get(name);
if(selectedNode)
{
selectedNode.scrollIntoView(true);
}
这是当单击特定树节点时树视图的解决方案,它只是滚动到页面的关注标题(不重定向),为此我们有简单的 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>
我使用了保罗的方法,它对我有用。我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);
}
归功于保罗·金梅尔
您还可以使用以下代码:
var elem = document.getElementById('TreeView1_SelectedNode');
if(elem != null )
{
var node = document.getElementById(elem.value);
if(node != null)
{
node.scrollIntoView(true);
}
}
归功于保罗·金梅尔
将此方法添加到您的代码后面。它对我有用。将 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);
}