是否可以向 MvcSiteMap 菜单节点添加分隔符?

发布于 2024-12-05 11:29:34 字数 564 浏览 0 评论 0原文

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

mvcSiteMapNodes 解析为

  • 项目,其中包含操作方法。 但是,我只想要一个虚拟
  • 节点,它在我的菜单中呈现分隔项。

    例如,

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

    有谁知道如何实现这一点?

    I'd like to be able to add a separator bar in my menu which is created using MvcSiteMap library.

    The mvcSiteMapNodes resolve to <li></li> items with the action method inside.
    However, I would like just a dummy <li class="divider"></li> node which renders a divider item in my menu.

    e.g.

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

    Does anyone know how this can be achieved?

    如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

    扫码二维码加入Web技术交流群

    发布评论

    需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

    评论(3

    庆幸我还是我 2024-12-12 11:29:34

    处理此问题的最佳方法是将分隔符站点地图节点放入 xml 站点地图文件中,并将 clickable 属性设置为 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 %>
    <% } %>
    

    The best way to handle this is to put the separator sitemap node in your xml sitemap file and set the clickable attribute to false. If it wants a controller and/or action then make one up specifically for a separator.

    Then create your own templates for rendering the menu. Within the templates you can examine the node model and put what ever html attributes you want in the rendered result. So if the sitemap node clickable attribute is false you can insert a string in the html class attribute and have your css style it however you like.

    See the "Customizing rendered output" section at this url : 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 %>
    <% } %>
    
    静谧 2024-12-12 11:29:34

    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 更新以显示所有这些

    The MvcSiteMap supports a 'clickable' attribute on mvcSiteMapNode which can render an empty

    <li> </li> 
    

    but can't see a way to specify the class and it seems to require a valid controller and action!

    If that's no good then JQuery could do it for you....

    Given this html:-

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

    and this JQuery call:-

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

    you should get your required output.

    I've created a JSFiddle to show it working.

    UPDATE

    Ok here's an updated solution to insert the divider at your required location:-

    $('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 updated to show all of these

    盗心人 2024-12-12 11:29:34

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

    <mvcSiteMapNode title="Separator" clickable="false" />
    

    If you set the title as "Separator" and clickable to "false" the node will appear as a line

    <mvcSiteMapNode title="Separator" clickable="false" />
    
    ~没有更多了~
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文