当前位置:  开发笔记 > 编程语言 > 正文

将Web.SiteMap与动态URLS(URL路由)一起使用

如何解决《将Web.SiteMap与动态URLS(URL路由)一起使用》经验,为你挑选了1个好方法。

我想在Web.SiteMap中匹配"近似"匹配

除了一件事之外,Web.Sitemap静态站点地图提供程序运行良好.这是静止的!

所以,如果我必须为我的页面上的每篇10,000篇文章都有一个sitemapnode,如下所示:

site.com/articles/1/article-title

site.com/articles/2/another-article-title

site.com/articles/3/another-article-again

...

site.com/articles/9999/the-last-article

是否有某种通配符映射我可以使用SiteMap来匹配文章下的任何内容?

或者也许在我的Webforms页面中,有没有办法手动设置当前节点?

在使用ASP.Net MVC框架执行此操作时,我在此页面上找到了一些帮助,但仍在寻找Webforms的良好解决方案.

我认为我要做的是创建一个自定义的SiteMap Provider



1> user39603..:

这是对上述评论的回应.我无法发布完整的代码,但这基本上是我的提供商的工作方式.

假设您有一个页面article.aspx,它使用查询字符串参数"id"来检索和显示文章标题和正文.然后这是在Web.sitemap中:


然后,您创建此类:

public class DynamicSiteMapPath : SiteMapPath
{
  protected override void InitializeItem(SiteMapNodeItem item)
  {
    if (item.ItemType != SiteMapNodeItemType.PathSeparator)
    {
      string url = item.SiteMapNode.Url;
      string param = item.SiteMapNode["param"];

      // get parameter value
      int id = System.Web.HttpContext.Current.Request.QueryString[param];

      // retrieve article from database using id
      

      // override node link
      HyperLink link = new HyperLink();
      link.NavigateUrl = url + "?" + param + "=" + id.ToString();
      link.Text = ;
      link.ToolTip = ;
      item.Controls.Add(link);
    }
    else
    {
      // if current node is a separator, initialize as usual
      base.InitializeItem(item);
    }
  }
}

最后,您在代码中使用此提供程序就像使用静态提供程序一样.


我的班级比这更复杂,但这些是基础知识.您可以只分析您正在使用的友好URL,而不是使用查询字符串参数,而是使用它来检索正确的内容.要最小化每个请求的额外数据库查找,您可以向提供程序添加缓存机制(文章标题通常不会经常更改).

希望这可以帮助.

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有