проблема относительно SiteMap.Provider.FindSiteMapNodeFromKey в проекте веб-формы asp.net - PullRequest
1 голос
/ 08 декабря 2011

Я работаю с проектом asp.net 4.0 webform.когда я открываю доступ к названию карты сайта, то не отображается для этой страницы.

здесь - подробности файла моей карты сайта

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
<siteMapNode url="~/index.aspx" title="Home"  description="The WebSite's Home Page">
<siteMapNode url="~/UPS/UPSLabelFormUK.aspx" title="UK Label"  description="UK Label" />
<siteMapNode url="~/ContactUS.aspx" title="ContactUS"  description="Contact US" />
<siteMapNode url="~/KnowledgeBase.aspx" title="Knowledge Base"  description="KnowledgeBase" />
<siteMapNode url="~/PartBase.aspx" title="PartSearch"  description="Part Search" />  
</siteMapNode>
</siteMap>

я обращаюсь к UPSLabelFormUK.aspx как localhost: 4990 / UK/ Метка, тогда некоторое время заголовок отображается на странице, а иногда нет.страница идет, потому что я написал код маршрутизации для этого типа

 void Application_Start(object sender, EventArgs e)
  {

    RouteTable.Routes.MapPageRoute("UK_Label", "UK/Label", "~/UPS/UPSLabelFormUK.aspx");
    SiteMap.SiteMapResolve += SiteMap_SiteMapResolve;
  }

Я отладил код и обнаружил, что когда-то узел был нулевым.вот строка в событии SiteMapResolve

node = SiteMap.Provider.FindSiteMapNode(handler.VirtualPath);

мой частичный код в событии разрешения карты сайта выглядит как

var node = SiteMap.CurrentNode;
    var rc = HttpContext.Current.Request.RequestContext;
    if (rc.HttpContext != null)
    {
      try
      {
        var route = rc.RouteData.Route;
        if (route != null)
        {
          // when node found in sitemap file and url is routing url
          var page = HttpContext.Current.CurrentHandler as System.Web.UI.Page;
          //var segments = route.GetVirtualPath(rc, null).VirtualPath.Split('/');
          //var path = "~/" + string.Join("/", segments.Take(segments.Length - rc.RouteData.Values.Count).ToArray());
          //node = SiteMap.Provider.FindSiteMapNodeFromKey(path);

          if (page != null && page.RouteData != null)
          {
            // if the current page wasn't found in the sitemap, maybe it was becase of routing... let's find out
            if (node == null)
            {
              // See if this page has a route
              var handler = page.RouteData.RouteHandler as PageRouteHandler;
              // if it was a page Route handler, we are in business
              if (handler != null)
              {
                // try and find the virutal path of the .aspx actually handling the request instead.
                node = SiteMap.Provider.FindSiteMapNode(handler.VirtualPath);
              }
            }
          }

Может кто-нибудь сказать мне, почему узел становится нулевым при возврате виртуального пути ~ / UPS/UPSLabelFormUK.aspx и этот URL-адрес существует в моем файле карты сайта.Пожалуйста, предложите мне правильное решение.

...