Asp.net mvc 5 MvcSiteMapProvider MVC5外部URL重新路由到主控制器/索引方法
我正在使用MVCSItemApprovider4.6.18。我的许多菜单项链接到外部站点;但是,mvcSiteMapNode的“url”属性没有被带入菜单。也就是说,我可以在源代码中看到url,但是链接引用的是父mvcSiteMapNode控制器和操作,而不是我指定的url 以下是相关代码:Asp.net mvc 5 MvcSiteMapProvider MVC5外部URL重新路由到主控制器/索引方法,asp.net-mvc-5,mvcsitemapprovider,Asp.net Mvc 5,Mvcsitemapprovider,我正在使用MVCSItemApprovider4.6.18。我的许多菜单项链接到外部站点;但是,mvcSiteMapNode的“url”属性没有被带入菜单。也就是说,我可以在源代码中看到url,但是链接引用的是父mvcSiteMapNode控制器和操作,而不是我指定的url 以下是相关代码: <?xml version="1.0" encoding="utf-8" ?> <mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchem
<?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="About" url="http://www.amazon.com"/>
</mvcSiteMapNode>
</mvcSiteMap>
任何帮助都将不胜感激
更新
多亏了@NightOwl888,其中一个显示模板出现了问题。mvcSiteMapProvider是我从wrapbootstrap下载的引导主题模板的一部分,我不认为显示模板是一个可能的问题
这是一个有问题的模板,从最初的NuGet下载修改为使用自定义侧栏菜单
@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel
@using System.Web.Mvc.Html
@using MvcSiteMapProvider.Web.Html.Models
<ul class="nav sidebar-menu">
@ShowMenu(Model.Nodes)
</ul>
@helper ShowMenu(IEnumerable<SiteMapNodeModel> menuItems)
{
foreach (var node in menuItems)
{
var nodeclass = "";
if (node.IsCurrentNode)
{
nodeclass = "active";
}
if (node.Children.Any(n => n.IsCurrentNode))
{
nodeclass = "active open";
}
else if (node.Children.Any())
{
foreach (var c in node.Children)
{
if (c.Children.Any())
{
if (c.Children.Any(n => n.IsCurrentNode))
{
nodeclass = "active open";
}
}
}
}
<li class="@(!string.IsNullOrEmpty(nodeclass) ? Html.Raw(nodeclass) : null)">
@if (node.Children.Any())
{
@Html.Bootstrap().SidebarMenuItem(node.Title, node.Area, node.Action, node.Controller).Icon(node.ImageUrl).IsDropDown();
}
else
{
@Html.Bootstrap().SidebarMenuItem(node.Title, node.Area, node.Action, node.Controller).Icon(node.ImageUrl);
}
@if (node.Children.Any())
{
<ul class="submenu">
@ShowMenu(node.Children)
</ul>
}
</li>
}
}
@model mvcsitemprovider.Web.Html.Models.MenuHelperModel
@使用System.Web.Mvc.Html
@使用MvcSiteMapProvider.Web.Html.Models
@显示菜单(Model.Nodes)
@助手显示菜单(IEnumerable菜单项)
{
foreach(菜单项中的变量节点)
{
var nodeclass=“”;
if(node.IsCurrentNode)
{
nodeclass=“活动”;
}
if(node.Children.Any(n=>n.IsCurrentNode))
{
nodeclass=“主动打开”;
}
else if(node.Children.Any())
{
foreach(node.Children中的变量c)
{
if(c.Children.Any())
{
if(c.Children.Any(n=>n.IsCurrentNode))
{
nodeclass=“主动打开”;
}
}
}
}
@if(node.Children.Any())
{
@Html.Bootstrap().SidebarMenuItem(node.Title、node.Area、node.Action、node.Controller).Icon(node.ImageUrl.IsDropDown();
}
其他的
{
@Html.Bootstrap().SidebarMenuItem(node.Title,node.Area,node.Action,node.Controller).Icon(node.ImageUrl);
}
@if(node.Children.Any())
{
@ShowMenu(节点子节点)
}
}
}
MvcSiteMapProvider
由驱动。由于我无法重现v4.6.18和MVC5的问题,我怀疑您没有在视图中添加问题
典型的情况是将菜单HTML助手添加到/Views/Shared/_Layout.cshtml
页面,如下所示
<div class="navbar-collapse collapse">
@*<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>*@
@* Use the MvcSiteMapProvider Menu HTML helper *@
@Html.MvcSiteMap().Menu()
@Html.Partial("_LoginPartial")
</div>
@*
- @ActionLink(“主页”、“索引”、“主页”)
- @ActionLink(“关于”、“关于”、“主页”)
- @ActionLink(“联系人”、“联系人”、“主页”)
*@
@*使用MvcSiteMapProvider菜单HTML帮助程序*@
@Html.MvcSiteMap().Menu()
@Html.Partial(“_LoginPartial”)
提示:如果将mvcsitemprovider.Web
包更新为4.6.18版,则引导CSS类将输出到“HTML助手”菜单上,因此它将与默认的MVC 5主题混合。从Package Manager控制台运行命令PM>Update Package mvcsitemprovider.Web-Safe
进行更新
嗨,它是自动创建网站还是我们必须手动创建?不确定“它是否自动创建网站”是什么意思。菜单创建得非常完美,除了它似乎忽略了url属性这一事实之外。也就是说,当我从nuget安装它时,它是否根据所有视图和控制器生成站点地图,或者我们必须定义并写入它们?当我从nuget安装时,它创建了一个我在上面发布的默认站点地图。我修改了About节点以测试外部url。我还没有任何其他的控制器或视图。我在我的_layout.cshtml文件中有HTML帮助程序,菜单显示得很好。我的问题是url属性。无论我使用什么url,url都不会应用于菜单。所以在我上面的例子中,我希望About菜单项可以导航到amazon.com;然而,事实并非如此。沿着这条线的某个地方,我指定的url被删除,并导致我在上面发布的输出-参考我的文章中的“查看源代码时看到的内容:”部分。基本上,url被替换为“/”以显示其工作。检查此项目的配置,特别是MvcSiteMapProvider的packages.config和
/Views/Shared/DisplayTemplates/
中的模板。我已将其缩小到MenuHelperModel.cshtml文件。事实上,我的与默认的不同。我会用我的发现更新我原来的帖子。谢谢你的帮助。
@model MvcSiteMapProvider.Web.Html.Models.MenuHelperModel
@using System.Web.Mvc.Html
@using MvcSiteMapProvider.Web.Html.Models
<ul class="nav sidebar-menu">
@ShowMenu(Model.Nodes)
</ul>
@helper ShowMenu(IEnumerable<SiteMapNodeModel> menuItems)
{
foreach (var node in menuItems)
{
var nodeclass = "";
if (node.IsCurrentNode)
{
nodeclass = "active";
}
if (node.Children.Any(n => n.IsCurrentNode))
{
nodeclass = "active open";
}
else if (node.Children.Any())
{
foreach (var c in node.Children)
{
if (c.Children.Any())
{
if (c.Children.Any(n => n.IsCurrentNode))
{
nodeclass = "active open";
}
}
}
}
<li class="@(!string.IsNullOrEmpty(nodeclass) ? Html.Raw(nodeclass) : null)">
@if (node.Children.Any())
{
@Html.Bootstrap().SidebarMenuItem(node.Title, node.Area, node.Action, node.Controller).Icon(node.ImageUrl).IsDropDown();
}
else
{
@Html.Bootstrap().SidebarMenuItem(node.Title, node.Area, node.Action, node.Controller).Icon(node.ImageUrl);
}
@if (node.Children.Any())
{
<ul class="submenu">
@ShowMenu(node.Children)
</ul>
}
</li>
}
}
<div class="navbar-collapse collapse">
@*<ul class="nav navbar-nav">
<li>@Html.ActionLink("Home", "Index", "Home")</li>
<li>@Html.ActionLink("About", "About", "Home")</li>
<li>@Html.ActionLink("Contact", "Contact", "Home")</li>
</ul>*@
@* Use the MvcSiteMapProvider Menu HTML helper *@
@Html.MvcSiteMap().Menu()
@Html.Partial("_LoginPartial")
</div>