【问题标题】:Dynamic Url and Title in Asp.net mvc SitemapAsp.net mvc 站点地图中的动态 URL 和标题
【发布时间】:2014-07-08 07:23:14
【问题描述】:

我正在为我的博客站点使用 asp.net mvc 站点地图,当我尝试在 Mvc.sitemap xml 文件中提供动态 url 和标题时出现了一个问题。我不想使用 DynamicNodeProvider,因为在这种情况下我们需要迭代所有博客,这会降低我的应用程序的速度。

我的控制器和动作代码是这样的:

public class ArticlesController : Controller
{

    public ActionResult Index(int id, string title)
    {
    }
}

Mvc.sitemap xml 如下:

<?xml version="1.0" encoding="utf-8" ?>
 <mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
        xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">
<mvcSiteMapNode title="Home" controller="Home" action="Index">
<mvcSiteMapNode title="DevSection" controller="DevSection" action="Index" key="DevSection">
  <mvcSiteMapNode title="Articles" controller="DevSection" action="Article" key="Articles">
    <mvcSiteMapNode title="" controller="Articles" action="Index" url="" />
  </mvcSiteMapNode>
  </mvcSiteMapNode>
 </mvcSiteMapNode>
 </mvcSiteMap>

在上面的 Mvc.sitemap xml 中,粗体突出显示的 mvcSiteMapNode 标题和 url 是空白的,因为我不知道如何传递动态构建 url 并像这样显示输出:

Home – DevSection – Articles – <dynamic title>

请帮助我,我怎样才能做到这一点。 提前致谢。

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-4 mvcsitemapprovider


【解决方案1】:

如果您只想制作动态面包屑路径,您可以使用preservedRouteParameters 使单个节点强制匹配每篇文章的路由值。

<?xml version="1.0" encoding="utf-8" ?>
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0"
        xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd">
    <mvcSiteMapNode title="Home" controller="Home" action="Index">
        <mvcSiteMapNode title="DevSection" controller="DevSection" action="Index" key="DevSection">
            <mvcSiteMapNode title="Articles" controller="DevSection" action="Article" key="Articles">
                <mvcSiteMapNode title="" controller="Articles" action="Index" preservedRouteParameters="id,title" />
            </mvcSiteMapNode>
        </mvcSiteMapNode>
    </mvcSiteMapNode>
</mvcSiteMap>

那么就可以使用SiteMapTitle属性来动态改变节点的标题了。

public class ArticlesController : Controller
{
    [SiteMapTitle("title")]
    public ActionResult Index(int id, string title)
    {
    }
}

您可能还需要使用FitleredSiteMapNodeVisibilityProvider 从菜单中隐藏具有“动态 URL”的节点。

但是,如果您打算使用内置的 sitemaps XML 功能以便您的文章在搜索引擎中被索引,则最好使用 DynamicNodeProvider。

有关此主题的完整讨论,请参阅How to Make MvcSiteMapProvider Remember a User's Position

【讨论】:

  • 谢谢,也为我工作。我实际上不必添加 SiteMapTitle 属性,它仍然有效。
猜你喜欢
  • 1970-01-01
  • 2011-06-07
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
  • 2011-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多