如何在我的 ASP.NET 菜单中使用 BreadCrumb 的 Bootstrap 样式?

Posted

技术标签:

【中文标题】如何在我的 ASP.NET 菜单中使用 BreadCrumb 的 Bootstrap 样式?【英文标题】:How to use Bootstrap style of BreadCrumb with my ASP.NET menu? 【发布时间】:2013-12-11 17:25:00 【问题描述】:

我是一名新的 ASP.NET 开发人员和 Twitter Bootstrap 的新用户。我试图在我的 ASP.NET 应用程序中有一个面包屑。我已经开发了它,但我正在尝试在其上应用 Twitter Breadcrumb 的样式。将特定的 CSS 样式应用于 ASP.NET Web 窗体控件确实太难了。

那该怎么做呢?

我的 ASP.NET 代码:

<asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
        <asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1"></asp:Menu>
        <asp:SiteMapPath ID="SiteMap1" runat="server" PathSeparator=" > " ParentLevelsDisplayed="1" 
            PathDirection="RootToCurrent" RenderCurrentNodeAsLink="false" ShowToolTips="true"></asp:SiteMapPath>

Breadcrumb 的 Twitter Bootstrap 样式:

<style>
        .breadcrumb
        
            padding: 8px 15px;
            margin-bottom: 20px;
            list-style: none;
            background-color: #f5f5f5;
            border-radius: 4px;
        

            .breadcrumb > li
            
                display: inline-block;
            

                .breadcrumb > li + li:before
                
                    padding: 0 5px;
                    color: #cccccc;
                    content: "/\00a0";
                

            .breadcrumb > .active
            
                color: #999999;
            
    </style>

仅供参考,在 html 中,面包屑将按以下方式开发:

    <ol class="breadcrumb">
        <li><a href="#">Home</a></li>
        <li><a href="#">Library</a></li>
        <li class="active">Data</li>
    </ol>

【问题讨论】:

一个好问题(不仅适用于初学者)。我今天还在想这个。 要摆脱跨度,请查看我对类似问题的回答:***.com/a/36761532/79485 【参考方案1】:

向服务器控件添加类的最简单方法是添加 CssClass="" 参数并指定要添加的类,如下所示:

    <asp:SiteMapPath 
        ID="SiteMap1"
        runat="server"
        PathSeparator=" > " 
        ParentLevelsDisplayed="1" 
        PathDirection="RootToCurrent" 
        RenderCurrentNodeAsLink="false" 
        ShowToolTips="true"
        CssClass="breadcrumb">
    </asp:SiteMapPath>

但是,由于 SiteMapPath 服务器控件生成标记的方式,您需要对控件以及 Bootstrap 的面包屑类进行一些额外的修改。

首先,SiteMapPath 服务器控件有一个名为 PathSeparator 的属性,它允许您指定用于分隔链接的字符。如果未指定,则默认使用和尖括号。 Bootstrap 的面包屑类使用正斜杠来分隔链接,因此您需要将 PathSeparator 属性从 PathSeparator=" > " 更改为 PathSeparator=" / "。

接下来,您必须为 SiteMapPath 服务器控件创建一个节点模板。这将告诉 SiteMapPath 控制每个节点应该遵循什么模板,并允许我们告诉它制作 li 而不是 s:

    <asp:SiteMapPath 
        ID="SiteMap1"
        runat="server"
        PathSeparator=" / " 
        ParentLevelsDisplayed="1" 
        PathDirection="RootToCurrent" 
        RenderCurrentNodeAsLink="false" 
        ShowToolTips="true"
        CssClass="breadcrumb">
        <NodeTemplate>
            <li>
                <asp:HyperLink
                    id="lnkPage"
                    Text='<%# Eval("Title") %>'
                    NavigateUrl='<%# Eval("Url") %>'
                    ToolTip='<%# Eval("Description") %>'
                    Runat="server"
                 />
            </li>
        </NodeTemplate>
    </asp:SiteMapPath>

最后,您需要修改面包屑类以在其嵌套中包含 SiteMapPath 控件的 span:

            .breadcrumb > span > li
            
                display: inline-block;
            

            .breadcrumb > span > li > a:active
            
                color: #999999;
            

【讨论】:

感谢您的帮助。但是,我已经尝试了您的答案,但没有给我正确的结果。请您检查一下吗? 啊,我明白了。 SiteMapPath 服务器控件生成的标记与 Bootstrap 的面包屑类的 CSS 嵌套不匹配。您将不得不重写嵌套。我将更新我的答案以使用我给出的标记。 感谢您的帮助。我真的很感激。是的,我成功了。 嘿,你帮了我很多,但是,现在面包屑的上下没有空间。原始标记有空格。我在网上搜索,但找不到任何帮助。另外,我在这里发现有人问同样的事情。你能看看他的担忧,因为我也有同样的担忧吗? Here's the link 我怎样才能用这个来回答我的问题:***.com/questions/26892575/…【参考方案2】:

如果您不想使用 javascript 从当前节点中删除超链接,这就是我所做的:

<ol class="breadcrumb">
  <asp:SiteMapPath runat="server" 
      PathSeparator=" / "
      PathDirection="RootToCurrent"
      RenderCurrentNodeAsLink="false">

      <CurrentNodeStyle CssClass="active"></CurrentNodeStyle>
      <PathSeparatorStyle CssClass="path" />
  </asp:SiteMapPath>   
</ol>  

然后我必须为跨度添加 css 以使其看起来像 Bootstrap 的面包屑。这些只是我使用的颜色,我用一些填充设置了路径分隔符的样式,以匹配 Bootstrap 的做法。

.breadcrumb > span > span a  text-decoration: none; color: #00a9c6;
.breadcrumb > span > span a:hover  text-decoration: underline;

.breadcrumb > span > span.active  color: #777; 

.breadcrumb > span > span.path  color: #d1d1d1; padding: 0 5px;

【讨论】:

在另一个类似的问题上,我提出了一个解决方案来消除多余的跨度。看看***.com/a/36761532/79485【参考方案3】:

这是一个对我有用的替代方法。

<div class="breadcrumb">
    <asp:SiteMapPath ID="SiteMap1" 
        runat="server"
        PathSeparator=" / " 
        ParentLevelsDisplayed="1" 
        PathDirection="RootToCurrent"
        ShowToolTips="true">
        <CurrentNodeStyle CssClass="current-node"></CurrentNodeStyle>
        <NodeTemplate>
            <li>
                <asp:HyperLink
                    id="lnkPage"
                    Text='<%# Eval("Title") %>'
                    NavigateUrl='<%# Eval("Url") %>'
                    ToolTip='<%# Eval("Description") %>'
                    Runat="server"
                 />
            </li>
        </NodeTemplate>
    </asp:SiteMapPath>
</div>

和css:

.breadcrumb > span > span > li
        
            display: inline-block;
        

此方法允许引导浮动元素在“面包屑”块内呈现。

注意:由于 Hyperlink 元素,NodeTemplate 块会覆盖 RenderCurrentNodeAsLink="false" 参数。为了克服这个问题,我使用 javascript 通过类选择器从 CurrentNode 元素中删除超链接(注意 CurrentNodeStyle 元素)。

希望这会有所帮助。

【讨论】:

我怎样才能用这个来回答我的问题:***.com/questions/26892575/…【参考方案4】:

更简单:

<div class="panel panel-default"> <div class="panel-heading"> <asp:SiteMapPath ID="SiteMapPath4" runat="server" SiteMapProvider="WebSiteMap" ParentLevelsDisplayed="3" PathSeparator=" / "> </asp:SiteMapPath> </div> </div>

asp.nettwitter-bootstrap

【讨论】:

以上是关于如何在我的 ASP.NET 菜单中使用 BreadCrumb 的 Bootstrap 样式?的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 asp.net 页面中使用数据库设置源? [关闭]

如何在我的 ASP.NET 核心 WebApi 项目中全局启用 CORS

如何在我的 ASP.NET MVC 应用程序中使用 ACE?

如何在我的 ASP.NET 应用程序中避免 SQL 注入攻击?

ASP.NET MVC SiteMap 提供程序——如何在实际菜单中“隐藏”单个项目

如何使用 url 重写将位置数据存储在我的 asp.net 站点上所有页面的 url 中?