接下來是一種方法來解決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);
}
}
第二功能是上述處理程序。