我最近碰到一个试图使用MvcSiteMapProvider的路障。使用多个MvcSiteMaps
在我的应用程序中,我有三个不同的方面:着陆,应用程序和管理。我目前已经实现了MvcSiteMapProvider,它的工作原理非常惊人,但我现在要做的是使用Html MvcSiteMap Helper,并根据我所在的区域指定不同的地图提供者。
因此,当我是:
- 在“管理”区域 - 我想使用名为“AdminSiteMapProvider”的提供程序。
- 在“应用程序”区域 - 我想使用名为“AppSiteMapProvider”的提供程序。
我已经试过如下:
共享 - > _AppLayout.cshtml
@Html.Partial("_Menu")
共享 - > _Menu.cshtml
@{
if (HttpContext.Current != null && HttpContext.Current.Handler is System.Web.Mvc.MvcHandler)
{
var handler = HttpContext.Current.Handler as System.Web.Mvc.MvcHandler;
var currentArea = handler.RequestContext.RouteData.Values["area"] ?? string.Empty;
if (!string.IsNullOrEmpty(currentArea.ToString()))
{
<text>@Html.MvcSiteMap("AppSiteMapProvider").Menu()</text>
}
else if (currentArea.ToString() == "Admin")
{
<text>@Html.MvcSiteMap("AdminSiteMapProvider").Menu()</text>
}
}
}
任何建议?我不想将_AppLayout.cshtml内容复制/粘贴到一个新区域,只是为了一个区域,我宁愿动态地选择正确的提供程序。
您是否尝试过使用mvcSiteMapNode的区域属性? –
2012-02-27 13:48:26
这只会改变生成的链接(我目前使用“area”作为管理链接)。我期望生成一组完全不同的链接,这些链接字面上位于单独的文件(admin.sitemap)中,具体取决于我目前是否在“管理”区域中进行浏览。 – Kori 2012-02-27 14:21:19