Asp.net mvc 5 单击菜单中的MvcSiteMapProvider“主页”按钮不起作用

Asp.net mvc 5 单击菜单中的MvcSiteMapProvider“主页”按钮不起作用,asp.net-mvc-5,asp.net-mvc-routing,mvcsitemapprovider,Asp.net Mvc 5,Asp.net Mvc Routing,Mvcsitemapprovider,我有一个使用MvcSiteMapProvider生成的菜单,它使用一个用于引导和路由的帮助器: 主控台: [MvcSiteMapNode(Title = "Home", Key = "home")] public ActionResult Index() { return View(model); } 其他控制员: [Route("mypageview", Name = "mypage")] [MvcSiteMapNode(Title = "My Page", ParentKey =

我有一个使用MvcSiteMapProvider生成的菜单,它使用一个用于引导和路由的帮助器:

主控台:

[MvcSiteMapNode(Title = "Home", Key = "home")]
public ActionResult Index()
{
    return View(model);
}
其他控制员:

[Route("mypageview", Name = "mypage")]
[MvcSiteMapNode(Title = "My Page", ParentKey = "home", Key = "mypage")]
public ActionResult mypage()
{
    mymodel model = .....
    return View(model);
}
助手:

<div class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
        @foreach (var node in Model.Nodes)
            {
                if (node.Children.Any())
                {
                    <li>
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown">@node.Title<strong class="caret"></strong></a>
                         <ul class="dropdown-menu">
                             @for (int i = 0; i < node.Children.Count; i++)
                             {
                                   <li>@Html.DisplayFor(x => node.Children[i])</li>
                             }
                         </ul>
                     </li>
                }
                else
                {
                    <li>
                         <a href="@node.Url" class="dropdown-toggle" data-toggle="dropdown">@node.Title</a>
                    </li>
                }
            }
     </ul>
</div> 
所有菜单项和下拉菜单都工作正常。它们都在导航到正确的位置。但是,菜单第一个“主页”按钮无法导航到索引


我尝试将索引包含到路由中,但这只会破坏网站。

这是引导的一个限制。因为它是用来与触摸屏一起工作的,所以AFAIK不可能使用打开子菜单的菜单项来导航到页面。在触摸屏设备上,无法告诉用户何时打开子菜单,而不是导航到当前菜单项的位置,因此唯一可用的操作是打开和关闭子菜单


有一些,但我没有尝试过,因此无法告诉您使用MvcSiteMapProvider的最佳解决方案是什么。只需说,MvcSiteMapProvider根本没有问题,因此您可能需要询问引导社区该怎么做。

我通过向没有子节点的节点添加url来解决此问题,并且onclick在有子节点的节点上打开标准子菜单:

@foreach (var node in Model.Nodes)
{
    if (node.Children.Any())
    {
        <li>
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">@node.Title<strong class="caret"></strong></a>
            <ul class="dropdown-menu">
                <li>@Html.DisplayFor(x => node)</li>
                @for (int i = 0; i < node.Children.Count; i++)
                {
                    <li>@Html.DisplayFor(x => node.Children[i])</li>
                }
            </ul>
       </li>
    }
    else
    {
        <li>
            <a href="@node.Url">@node.Title</a>
        </li>
    }
}
@foreach (var node in Model.Nodes)
{
    if (node.Children.Any())
    {
        <li>
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">@node.Title<strong class="caret"></strong></a>
            <ul class="dropdown-menu">
                <li>@Html.DisplayFor(x => node)</li>
                @for (int i = 0; i < node.Children.Count; i++)
                {
                    <li>@Html.DisplayFor(x => node.Children[i])</li>
                }
            </ul>
       </li>
    }
    else
    {
        <li>
            <a href="@node.Url">@node.Title</a>
        </li>
    }
}
[MvcSiteMapNode(Title = "mytitle", 
                ParentKey =  "home", 
                Key = "experiencevenuesandcircuits", 
                Order = 5)]