我的路线:
"{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 =>假的。 它看起来像我需要重写它。 可能有人给出建议怎么办呢? 有没有办法解决这个问题的任何其他方式? 或者,也许我需要以某种方式分配父? 但它为默认语言。
你只需要将其设置为强制匹配的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属性的定位信息。