使MVCSITEMAP提供商与自定义友好的SEO URL一起工作的困难



你好吗?

我在试图配置与MVCSITEMAP提供商的BreadCrumb配置SEO友好的URL路线时遇到了一些困难。看起来显然很简单,但是由于缺乏ASP.NET MVC的经验以及与SEO相关的内容以及与此组件有关。

为了学习目的,我创建了一个简单的MVC网站,在其中添加了MVC SiteMap提供商软件包。

这是我要实现的目标:

给定URL http://localhost:1234/product/the-product-name/1234,我想显示一个看起来像这样的面包屑:

主页>>产品>>产品名称

为了以这种方式产生URL,我创建了以下路线:

routes.MapRoute(
  name: "SEO_Product",
  url: "product/{id}/{title}",
  defaults: new { controller = "Product", action = "Details" }
);

在mvc.sitemap文件中,我创建了以下节点结构:

<mvcSiteMapNode title="Home" controller="Home" action="Index">
    <mvcSiteMapNode title="Products" controller="Product" action="Index">
      <mvcSiteMapNode title="Details" controller="Product" action="Details" preservedRouteParameters="id" />
    </mvcSiteMapNode>
</mvcSiteMapNode>

另外,控制器名称是productController,并且接收请求的操作方法如下:

[SiteMapTitle("Title")]
public ActionResult Details(int id)
{
    var productSearchResult = productRepository.List(pr => pr.Id == id);
    var product = default(Product);
    if (productSearchResult.Item != null)
        product = productSearchResult.Item.FirstOrDefault();
    else
        RedirectToAction("Index");
    return View(product);
}

当我评论上方的SEO_Product路线时,面包屑会成功地呈现。但是,到达此页面的链接是这样的URL:

http://localhost:50888/product/delect/lotes/1?title = product-name(不需要)

当我删除上述路线并运行应用程序时,面包屑根本不会呈现!

我这样实现了此页面的链接:

@Html.ActionLink(product.Title, "Details", new { title = product.UrlFriendlyTitle, id = product.Id },null)

我还试图创建动态杂志的实现,以及对MVC.SiteMap的调整,以遵循Maarten Balliauw的SiteMapprovider Github的说明正在震惊我的脑海。而且我不确定这是否是为此事创建此类功能的情况。

我希望你们能告诉我我应该走的方向,我真的很感谢您的帮助。

cristiano m dias

配置节点时,您必须考虑路由值。尽管您已经配置了id,但您尚未为title配置任何内容。

也就是说,titleMvcSiteMapProvider中保留的密钥名称。因此,您需要选择另一个名称(例如productTitle)作为路由密钥。

routes.MapRoute(
  name: "SEO_Product",
  url: "product/{id}/{productTitle}",
  defaults: new { controller = "Product", action = "Details" }
);

然后说明节点配置中的productTitle参数。这样可以确保当传递productTitle路由值时它将匹配。

<mvcSiteMapNode title="Home" controller="Home" action="Index">
    <mvcSiteMapNode title="Products" controller="Product" action="Index">
      <mvcSiteMapNode title="Details" controller="Product" action="Details" preservedRouteParameters="id,productTitle" />
    </mvcSiteMapNode>
</mvcSiteMapNode>

,您的链接也应使用productTitle

@Html.ActionLink(product.Title, "Details", new { productTitle = product.UrlFriendlyTitle, id = product.Id },null)

注意:要获取问题中的URL,您需要将路线更改为product/{productTitle}/{id}

相关内容

  • 没有找到相关文章

最新更新