Практическое руководство. Программное перечисление узлов карты веб-узла
Обновлен: Ноябрь 2007
Можно использовать элементы управления переходов для добавления структуры переходов веб-узла на веб-страницы с минимальным количеством кода или совсем без кода, но можно также работать со структурой переходов узла программными средствами. При запуске веб-приложения ASP.NET создает объект SiteMap, отражающий структуру карты веб-узла. Объект SiteMap, в свою очередь, предоставляет коллекцию объектов SiteMapNode, содержащую свойства для каждого узла в карте веб-узла.
Элементы управления переходов, например элемент управления SiteMapPath, работают с объектами SiteMap и SiteMapNode для автоматического отображения соответствующих ссылок.
Можно использовать объекты SiteMap и SiteMapNode в собственном коде для создания пользовательских переходов.
Пример
В следующем примере показано отображение названий всех дочерних узлов для текущей страницы, если текущая страница входит в перечень файла карты веб-узла. Если текущая страница отсутствует в файле карты веб-узла, то первая строка кода, использующего объект SiteMap, вызовет исключение NullReferenceException.
<%@ Page language="VB" AutoEventWireup="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
Try
Dim LabelText As String = ""
' Displays the title of the current node.
Label_CurrentNode.Text = SiteMap.CurrentNode.Title
' Determines if the current node has child nodes.
If (SiteMap.CurrentNode.HasChildNodes) Then
For Each ChildNodesEnumerator As SiteMapNode In SiteMap.CurrentNode.ChildNodes
' Displays the title of each node.
LabelText = LabelText & ChildNodesEnumerator.Title & "<br />"
Next
Else
LabelText = LabelText & "No child nodes."
End If
Label_ChildNodes.Text = LabelText
Catch ex As NullReferenceException
Label_CurrentNode.Text = "The current file is not in the site map."
Catch ex As Exception
Label_CurrentNode.Text = "Generic exception: " & e.ToString()
End Try
End Sub ' Page_Load
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Enumerating Child Site Map Nodes</title>
</head>
<body>
<form id="Form1" method="post" runat="server">
<h2>Current Node</h2>
<asp:Label ID="Label_CurrentNode" Runat="Server"></asp:Label>
<h2>Child Nodes</h2>
<asp:Label ID="Label_ChildNodes" Runat="Server"></asp:Label>
<h2>Verify Against Site Map</h2>
<asp:SiteMapDataSource ID="SiteMapDataSource1" Runat="server" />
<asp:TreeView ID="TreeView1" Runat="server" DataSourceID="SiteMapDataSource1">
</asp:TreeView>
</form>
</body>
</html>
<%@ Page language="c#" AutoEventWireup="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
private void Page_Load(object sender, System.EventArgs e)
{
try
{
string LabelText = "";
// Displays the title of the current node.
Label_CurrentNode.Text = SiteMap.CurrentNode.Title;
// Determines if the current node has child nodes.
if (SiteMap.CurrentNode.HasChildNodes)
{
foreach (SiteMapNode childNodesEnumerator in SiteMap.CurrentNode.ChildNodes)
{
// Displays the title of each node.
LabelText = LabelText + childNodesEnumerator.Title + "<br />";
}
}
Label_ChildNodes.Text = LabelText;
}
catch (System.NullReferenceException ex)
{
Label_CurrentNode.Text = "The current file is not in the site map.";
}
catch (Exception ex)
{
Label_CurrentNode.Text = "Generic exception: " + e.ToString();
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>Enumerating Child Site Map Nodes</title>
</head>
<body>
<form id="Form1" method="post" runat="server">
<h2>Current Node</h2>
<asp:Label id="Label_CurrentNode" runat="Server"></asp:Label>
<h2>Child Nodes</h2>
<asp:Label id="Label_ChildNodes" runat="Server"></asp:Label>
<h2>Verify Against Site Map</h2>
<asp:SiteMapDataSource id="SiteMapDataSource1" runat="server" />
<asp:TreeView id="TreeView1" runat="server" dataSourceID="SiteMapDataSource1">
</asp:TreeView>
</form>
</body>
</html>
Безопасность
Можно скрыть ссылки в структуре переходов от пользователей с определенными ролями безопасности. Дополнительные сведения см. в разделе Фильтрация карты веб-узла ASP.NET по ролям безопасности.
См. также
Задачи
Практическое руководство. Программное изменение узлов карты веб-узла в памяти
Основные понятия
Безопасность системы навигации веб-узла ASP.NET