SiteMap.SiteMapResolve Händelse
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Inträffar när egenskapen CurrentNode används.
public:
static event System::Web::SiteMapResolveEventHandler ^ SiteMapResolve;
public static event System.Web.SiteMapResolveEventHandler SiteMapResolve;
member this.SiteMapResolve : System.Web.SiteMapResolveEventHandler
Public Shared Custom Event SiteMapResolve As SiteMapResolveEventHandler
Händelsetyp
Exempel
Följande kodexempel visar hur du hanterar händelsen SiteMapResolve på en ASP.NET webbsida för att ändra mål-URL:er som visas av en platsnavigeringskontroll, till exempel kontrollen SiteMapPath. I det här exemplet är den aktuella sidan en inläggssida i en anslagstavla eller ett forum online. För att återge mer meningsfull platsnavigering läggs URL:erna för de noder som visas av navigeringskontrollen till med kontextreleventa frågesträngar.
Note
Infrastrukturen för ASP.NET platsnavigering skyddar mot oändlig rekursion, vilket ger ett skydd och minimerar den säkerhetsrisk som är associerad med åtkomst till egenskapen CurrentNode inifrån klassen SiteMapResolveEventHandler.
Följande kod tillhör filen Global.asax. Händelsehanteraren kopplas bara en gång för programmet. Koden identifierar om sidan implementerar ISiteMapResolver gränssnittet. Om gränssnittet implementeras anropas ExpandForumPaths funktionen.
private void Page_Load(object sender, EventArgs e)
{
// The ExpandForumPaths method is called to handle
// the SiteMapResolve event.
SiteMap.SiteMapResolve +=
new SiteMapResolveEventHandler(this.ExpandForumPaths);
}
private SiteMapNode ExpandForumPaths(Object sender, SiteMapResolveEventArgs e)
{
// The current node represents a Post page in a bulletin board forum.
// Clone the current node and all of its relevant parents. This
// returns a site map node that a developer can then
// walk, modifying each node.Url property in turn.
// Since the cloned nodes are separate from the underlying
// site navigation structure, the fixups that are made do not
// effect the overall site navigation structure.
SiteMapNode currentNode = SiteMap.CurrentNode.Clone(true);
SiteMapNode tempNode = currentNode;
// Obtain the recent IDs.
int forumGroupID = GetMostRecentForumGroupID();
int forumID = GetMostRecentForumID(forumGroupID);
int postID = GetMostRecentPostID(forumID);
// The current node, and its parents, can be modified to include
// dynamic querystring information relevant to the currently
// executing request.
if (0 != postID)
{
tempNode.Url = tempNode.Url + "?PostID=" + postID.ToString();
}
if ((null != (tempNode = tempNode.ParentNode)) &&
(0 != forumID))
{
tempNode.Url = tempNode.Url + "?ForumID=" + forumID.ToString();
}
if ((null != (tempNode = tempNode.ParentNode)) &&
(0 != forumGroupID))
{
tempNode.Url = tempNode.Url + "?ForumGroupID=" + forumGroupID.ToString();
}
return currentNode;
}
Private Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)
' The ExpandForumPaths method is called to handle
' the SiteMapResolve event.
AddHandler SiteMap.SiteMapResolve, AddressOf Me.ExpandForumPaths
End Sub
Private Function ExpandForumPaths(ByVal sender As Object, ByVal e As SiteMapResolveEventArgs) As SiteMapNode
' The current node represents a Post page in a bulletin board forum.
' Clone the current node and all of its relevant parents. This
' returns a site map node that a developer can then
' walk, modifying each node.Url property in turn.
' Since the cloned nodes are separate from the underlying
' site navigation structure, the fixups that are made do not
' effect the overall site navigation structure.
Dim currentNode As SiteMapNode = SiteMap.CurrentNode.Clone(True)
Dim tempNode As SiteMapNode = currentNode
' Obtain the recent IDs.
Dim forumGroupID As Integer = GetMostRecentForumGroupID()
Dim forumID As Integer = GetMostRecentForumID(forumGroupID)
Dim postID As Integer = GetMostRecentPostID(forumID)
' The current node, and its parents, can be modified to include
' dynamic querystring information relevant to the currently
' executing request.
If Not (0 = postID) Then
tempNode.Url = tempNode.Url & "?PostID=" & postID.ToString()
End If
tempNode = tempNode.ParentNode
If Not (0 = forumID) And Not (tempNode Is Nothing) Then
tempNode.Url = tempNode.Url & "?ForumID=" & forumID.ToString()
End If
tempNode = tempNode.ParentNode
If Not (0 = ForumGroupID) And Not (tempNode Is Nothing) Then
tempNode.Url = tempNode.Url & "?ForumGroupID=" & forumGroupID.ToString()
End If
Return currentNode
End Function
Följande kod definierar ett separat gränssnitt. (I ett webbplatsprojekt kan du placera den här koden i mappen App_Code.) Gränssnittet ISiteMapResolver definierar ExpandForumPaths metoden.
// These methods are just placeholders for the example.
// One option is to use the HttpContext or e.Context object
// to obtain the ID.
private int GetMostRecentForumGroupID()
{
return 24;
}
private int GetMostRecentForumID(int forumGroupId)
{
return 128;
}
private int GetMostRecentPostID(int forumId)
{
return 317424;
}
' These methods are just placeholders for the example.
' One option is to use the HttpContext or e.Context object
' to obtain the ID.
Private Function GetMostRecentForumGroupID() As Integer
Return 24
End Function
Private Function GetMostRecentForumID(ByVal forumGroupId As Integer) As Integer
Return 128
End Function
Private Function GetMostRecentPostID(ByVal forumId As Integer) As Integer
Return 317424
End Function
Följande kod hör till sidan som är minst tre noder djupt i webbplatsöversiktsstrukturen. Sidan implementerar ISiteMapResolver gränssnittet, vilket gör att metoden kan ExpandForumPaths anropas.
<asp:SiteMapPath
id="SiteMapPath1"
runat="server"
RenderCurrentNodeAsLink="true" />
<asp:SiteMapPath
id="SiteMapPath1"
runat="server"
RenderCurrentNodeAsLink="true" />
Kommentarer
Prenumeranter bifogar ett SiteMapResolveEventHandler objekt till den statiska SiteMapResolve händelsen för att ta emot meddelanden när egenskapen CurrentNode används. Detta gör det möjligt för användaren att implementera anpassad logik när du skapar en SiteMapNode representation av sidan som körs för närvarande utan att kräva en anpassad providerimplementering.
Om du prenumererar på SiteMapResolve händelsen prenumererar SiteMapResolve du också på händelsen på standardleverantören för webbplatsöversikten.