Asp.net mvc 5 MvcSiteMapProvider MVC5外部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

我正在使用MVCSItemApprovider4.6.18。我的许多菜单项链接到外部站点;但是,mvcSiteMapNode的“url”属性没有被带入菜单。也就是说,我可以在源代码中看到url,但是链接引用的是父mvcSiteMapNode控制器和操作,而不是我指定的url

以下是相关代码:

<?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>