【问题标题】:MvcSiteMapProvider "Home" button in menu not working onclick菜单中的 MvcSiteMapProvider“主页”按钮在单击时不起作用
【发布时间】:2015-07-11 03:35:40
【问题描述】:

我有一个使用 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> 

布局视图:

@Html.MvcSiteMap().Menu("BootstrapMenuHelperModel")

所有菜单项都可以完美运行,下拉菜单也是如此。他们都在导航到正确的位置。但是菜单的“主页”按钮(第一个)不会导航到索引。

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

【问题讨论】:

    标签: asp.net-mvc-5 asp.net-mvc-routing mvcsitemapprovider


    【解决方案1】:

    这是引导程序的限制。由于它适用于触摸屏,因此无法使用打开子菜单的菜单项导航到页面。在触摸屏设备上,无法判断用户何时想要打开子菜单与导航到当前菜单项的位置,因此唯一可用的操作是打开和关闭子菜单。

    有一些known workarounds,但我没有尝试过它们,所以无法告诉您与MvcSiteMapProvider 一起使用的最佳解决方案是什么。可以说 MvcSiteMapProvider 根本不是问题,所以你可能想问问引导社区该怎么做。

    【讨论】:

      【解决方案2】:

      我通过向没有子节点的节点添加 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>
          }
      }
      

      对于像我一样第一次这样做的人,我还添加了一个订单标签以按我想要的顺序排列我的菜单项:

      [MvcSiteMapNode(Title = "mytitle", 
                      ParentKey =  "home", 
                      Key = "experiencevenuesandcircuits", 
                      Order = 5)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-09
        • 2014-03-24
        • 2021-09-12
        • 1970-01-01
        • 2015-04-01
        • 2014-01-12
        • 1970-01-01
        • 2015-02-02
        相关资源
        最近更新 更多