3

我希望能够在使用 MvcSiteMap 库创建的菜单中添加一个分隔栏。

mvcSiteMapNodes 解析为<li></li>内部带有 action 方法的项目。但是,我只想要一个虚拟<li class="divider"></li>节点,它在我的菜单中呈现一个分隔项。

例如

<mvcSiteMapNode title="Admin" url="#admin" roles="Admin">
  <mvcSiteMapNode title="Edit Users" controller="User" action="Users" roles="Admin" />      
  <mvcSiteMapNode class="divider"  />
  <mvcSiteMapNode title="User Audit" controller="User" action="Audit" roles="Admin" />      
</mvcSiteMapNode>

有谁知道如何做到这一点?

4

3 回答 3

2

处理此问题的最佳方法是将分隔站点地图节点放在您的 xml 站点地图文件中,并将可点击属性设置为 false。如果它想要一个控制器和/或动作,那么专门为分隔符制作一个。

然后创建自己的模板来呈现菜单。在模板中,您可以检查节点模型并将所需的任何 html 属性放入呈现的结果中。因此,如果站点地图节点的可点击属性为 false,您可以在 html 类属性中插入一个字符串,并根据自己的喜好设置 css 样式。

请参阅此网址的“自定义渲染输出”部分:https ://github.com/maartenba/MvcSiteMapProvider/wiki/HtmlHelper-functions

<%@ Control Language="C#"Inherits="System.Web.Mvc.ViewUserControl<MvcSiteMapProvider.Web.Html.Models.SiteMapNodeModel>" %>
<%@ Import Namespace="System.Web.Mvc.Html" %>

<% if (Model.IsCurrentNode && Model.SourceMetadata["HtmlHelper"].ToString() != "MvcSiteMapProvider.Web.Html.MenuHelper")  { %>
    <%=Model.Title %>
<% } else if (Model.IsClickable) { %>
<a href="<%=Model.Url %>"><%=Model.Title %></a>
<% } else { %>
<%=Model.Title %>
<% } %>
于 2012-06-01T01:19:57.673 回答
1

MvcSiteMap 支持 mvcSiteMapNode 上的“可点击”属性,该属性可以呈现空

<li> </li> 

但看不到指定类的方法,它似乎需要一个有效的控制器和动作!

如果这不好,那么 JQuery 可以为你做......

鉴于此html:-

<div id="sitemap">
  <ul>
    <li>Edit Users</li>
    <li>User Audit</li>
    <li>Another Option</li>
    <li>Something else</li>      
  </ul>
</div>

这个 JQuery 调用:-

$('<li class="divider"></li>').appendTo('div#sitemap li:not(:last)');

你应该得到你需要的输出。

我创建了一个JSFiddle来展示它的工作原理。

更新

好的,这是一个更新的解决方案,可在您所需的位置插入分隔线:-

$('div#sitemap li').last().prev().after('<li class="divider"></li>');

$('<li class="divider"></li>').appendTo('div#sitemap li:nth-child(3)');

$('div#sitemap li:last').prev().after('<li class="divider"></li>');

JSFiddle更新以显示所有这些

于 2011-09-26T22:37:19.120 回答
1

如果您将标题设置为“分隔符”并且可单击为“假”,则节点将显示为一条线

<mvcSiteMapNode title="Separator" clickable="false" />
于 2015-11-06T18:27:56.530 回答