在网址Mvc.sitemap多语言菜单,语言(Multilanguage menu for Mvc.

2019-10-20 03:25发布

我的路线:

"{lang}/{controller}/{action}/{id}"

{}长在这里:EN-US,DE-DE等。

一切工作,直到正确的时刻,我想切换语言。 当我切换语言,我失去了菜单的一部分。

我MenuHelperModel.chtml

@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel
@using System.Web.Mvc.Html
@using MvcSiteMapProvider.Web.Html.Models
<div class="hmenu">
  <ul class="tabs">
    @foreach (var node in Model.Nodes)
    { 
      <li>@Html.DisplayFor(m => node)</li>
    }
  </ul>
</div>
@foreach (var node in Model.Nodes)
{ 
  if (node.IsInCurrentPath)
  {
    if (node.Children.Any()) {
     //Left side menu
     <div class="vmenu" style="float: left;">
       <ul class="tabs">
          @foreach (var child in node.Children)
          { 
            <li><a href="@child.Url">@child.Description</a></li>
          }
        </ul>
      </div>
    }
  }
}

一切只为默认语言的工作是正确的,但对所有其他node.IsInCurrentPath =>假的。 它看起来像我需要重写它。 可能有人给出建议怎么办呢? 有没有办法解决这个问题的任何其他方式? 或者,也许我需要以某种方式分配父? 但它为默认语言。

Answer 1:

你只需要将其设置为强制匹配的lang参数,所以它总是会从当前请求到节点的RouteValues字典的路径复制过来。

<mvcSiteMapNode title="Home" controller="Home" action="Index" preservedRouteParameters="lang">
    <mvcSiteMapNode title="About" controller="Home" action="About" preservedRouteParameters="lang"/>
</mvcSiteMapNode>

我怀疑它为什么“工作”为默认语言的原因是因为你已经设置了默认lang在你的路线参数。 但在技术上,它仍然不能匹配当前URL的路线,因为你没有平衡等式的两边。 你必须看起来像这样的价值观:

|-----------------------------------|-----------------------------------|
|         Current Request           |          SiteMap Node             |
|-----------------------------------|-----------------------------------|
|      Key       |      Value       |      Key       |      Value       |
|-----------------------------------|-----------------------------------|
| controller     | Home             | controller     | Home             |
| action         | Index            | action         | Index            |
| lang           | de-DE            |                |                  |
|-----------------------------------|-----------------------------------|

不因为缺少匹配lang在节点键和值。 添加具有适当的键preservedRouteParameters将在当前请求将它们复制他们相比之前:

|-----------------------------------|-----------------------------------|
|         Current Request           |          SiteMap Node             |
|-----------------------------------|-----------------------------------|
|      Key       |      Value       |      Key       |      Value       |
|-----------------------------------|-----------------------------------|
| controller     | Home             | controller     | Home             |
| action         | Index            | action         | Index            |
| lang           | de-DE            | lang           | de-DE            |
|-----------------------------------|-----------------------------------|

这将迫使与郎参数的任何值匹配。 如果所有的其他键和值也匹配,你将会对CurrentNode属性,不为空,得到的SiteMapPath和菜单的许多功能的工作是很重要的值。 它完全是由你来或者通过使用preservedRouteParameters或配置为每个路由值组合的独立节点平衡收支,但始终必须用比面积,控制器和行动等路由值时,可以考虑。

另外,看到这个答案有关设置的SiteMapNode属性的定位信息。



文章来源: Multilanguage menu for Mvc.sitemap with language in an Url