接下来是一种方法来解决ASP.NET 4.0与Web窗体,在母版页中的问题。
在展示页面,你可以有一个TreeView如以下几点:
<asp:TreeView
ID="tv"
runat="server"
SelectedNodeStyle-BorderStyle="Solid"
SelectedNodeStyle-HorizontalPadding="5"
SelectedNodeStyle-VerticalPadding="5"
onselectednodechanged="tv_SelectedNodeChanged">
<Nodes>
<asp:TreeNode Text="Contact" Value="~/General/Contact.aspx"></asp:TreeNode>
<asp:TreeNode Text="Change login name" Value="~/General/ChangeLoginName.aspx"></asp:TreeNode>
<asp:TreeNode Text="Change password" Value="~/General/ChangePassword.aspx"></asp:TreeNode>
<asp:TreeNode Text="Terms and Policies" Value="~/General/TermsOfUse.aspx"></asp:TreeNode>
</Nodes>
</asp:TreeView></td>
重要的事情这里需要注意的是:
(1)用于导航的URL被分配到“值”属性,而不是TreeNode类的“NavigateUrl”属性。
(2)我们为所选节点定义了样式。 (3)我们定义了一个事件,“onselectednodechanged”。一个简单的方法是在Design View中双击TreeView。这也会在代码隐藏文件中创建一个事件处理程序存根,我们将在稍后使用它。
在代码隐藏文件,以下三个功能是所有需要:
protected void HighlightSelectedLink(TreeNodeCollection nodes, string treeViewSelectedValue)
{
if (!string.IsNullOrEmpty(treeViewSelectedValue))
{
foreach (TreeNode tn in nodes)
{
if (tn.Value == treeViewSelectedValue)
{
tn.Selected = true;
}
else
{
tn.Selected = false;
}
HighlightSelectedLink(tn.ChildNodes, treeViewSelectedValue);
}
}
}
protected void tv_SelectedNodeChanged(object sender, EventArgs e)
{
string treeViewSelectedValue = tv.SelectedValue;
if (treeViewSelectedValue.EndsWith(".aspx"))
{
Response.BufferOutput = true;
Response.Redirect(tv.SelectedValue);
}
}
protected void Page_PreRender(object sender, EventArgs e)
{
string treeViewSelectedValue = Request.AppRelativeCurrentExecutionFilePath;
if (!string.IsNullOrEmpty(treeViewSelectedValue))
{
TreeNodeCollection nodes = tv.Nodes;
HighlightSelectedLink(nodes, treeViewSelectedValue);
}
}
第二功能是上述处理程序。