MvcSiteMapProvider "Home" 菜单中的按钮在点击时不起作用
MvcSiteMapProvider "Home" button in menu not working onclick
我有一个使用 MvcSiteMapProvider 生成的菜单,使用 bootstrap 和路由的帮助程序:
控制器主页:
[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")
所有菜单项和下拉菜单都运行良好。他们都导航到正确的位置。但是,菜单的 'Home' 按钮(第一个)不会导航到索引。
我试过在路由中包含索引,但这只会破坏网站。
这是 bootstrap 的限制。由于它是为触摸屏设计的,据我所知,不可能使用打开子菜单的菜单项来导航到页面。在触摸屏设备上,无法判断用户何时想要打开子菜单与导航到当前菜单项的位置,因此唯一可用的操作是打开和关闭子菜单。
有一些 known workarounds,但我没有尝试过,所以无法告诉您与 MvcSiteMapProvider
一起使用的最佳解决方案是什么。可以说这对 MvcSiteMapProvider
根本不是问题,因此您可能想询问 bootstrap 社区该怎么做。
我通过向没有子节点的节点添加 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)]
我有一个使用 MvcSiteMapProvider 生成的菜单,使用 bootstrap 和路由的帮助程序:
控制器主页:
[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")
所有菜单项和下拉菜单都运行良好。他们都导航到正确的位置。但是,菜单的 'Home' 按钮(第一个)不会导航到索引。
我试过在路由中包含索引,但这只会破坏网站。
这是 bootstrap 的限制。由于它是为触摸屏设计的,据我所知,不可能使用打开子菜单的菜单项来导航到页面。在触摸屏设备上,无法判断用户何时想要打开子菜单与导航到当前菜单项的位置,因此唯一可用的操作是打开和关闭子菜单。
有一些 known workarounds,但我没有尝试过,所以无法告诉您与 MvcSiteMapProvider
一起使用的最佳解决方案是什么。可以说这对 MvcSiteMapProvider
根本不是问题,因此您可能想询问 bootstrap 社区该怎么做。
我通过向没有子节点的节点添加 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)]