TreeView做页面导航时关于修改TreeNode属性的疑惑?
本帖最后由 gutar0000 于 2013-01-14 19:23:51 编辑 用TreeView绑定SiteMapDataSource做网页导航,发现TreeNode的SelectAction属性默认为None,就想把它
改成Expand,可是问题出现了,无论我把修改SelectAction属性放在 Page_Load 还是Page_PreRender里面都
不行,测试发现TreeView的Nodes.Count=0,但是我在页面中加一个Button,点击Button后TreeNode的SelectAction属性修改了,不解求大家指点。
Web.sitemap的代码:
<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/SendMsg.aspx" title="首页" description="">
<siteMapNode url="" title="节点1.1" description=""></siteMapNode>
<siteMapNode url="" title="节点1.2" description=""></siteMapNode>
<siteMapNode url="" title="节点1.3" description="">
<siteMapNode url="" title="节点1.3.1" description=""/>
<siteMapNode url="" title="节点1.3.2" description=""/>
<siteMapNode url="" title="节点1.3.3" description=""/>
<siteMapNode url="" title="节点1.3.4" description=""/>
</siteMapNode>
<siteMapNode url="" title="节点1.4" description="" >
<siteMapNode url="" title="节点1.4.1" description="" />
<siteMapNode url="" title="节点1.4.2" description=""/>
</siteMapNode>
</siteMapNode>
</siteMap>
TreeView代码:
<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" StartingNodeOffset="0" />
<asp:TreeView ID="menuleft"
runat="server"
NodeIndent="0"
DataSourceID="SiteMapDataSource1"
ShowLines="false"
NodeWrap="false"
ShowExpandCollapse="true">
</asp:TreeView>
Page_Load和 Page_PreRender 的代码:
TreeView TreeNode Page事件
protected void Page_PreRender(object sender, EventArgs e)
{
foreach (TreeNode node in menuleft.Nodes)//menuleft为上面定义的TreeView
{
Travel(node); //递归遍历
}
}
protected void Page_Load(object sender, EventArgs e)
{
foreach (TreeNode node in menuleft.Nodes)
{
Travel(node);
}
}
public void Travel(TreeNode node)
{
if (node.ChildNodes.Count == 0)
return;
else if (node.Parent == null)
{
foreach (TreeNode n in node.ChildNodes)
{
Travel(n);
}
return;
}
else
{
node.SelectAction = TreeNodeSelectAction.Expand; //更改TreeNode属性
foreach (TreeNode n in node.ChildNodes)
{
Travel(n);
}
}
}
[解决办法]
用得着每一个请求页面都创建一次TreeView吗?人家自己会恢复TreeView,然后你给作废了,人家的状态还怎么维持?