引导程序和 ASP.NET 菜单

Posted

技术标签:

【中文标题】引导程序和 ASP.NET 菜单【英文标题】:Bootstrap and ASP.NET Menu 【发布时间】:2014-09-08 22:31:57 【问题描述】:

我正在我的 ASP.NET Web 应用程序中创建一个导航栏,我正在使用 bootstrap-3.1.1。特别是我正在尝试利用他们的导航选项卡,如here 所示。我对这个问题做了很多研究,过去我也没有成功处理过这种情况。我使用this 链接作为参考,因为它完成了非常相似的任务,但我的应用程序显示了意外的结果。我意识到之前的链接是针对 Twitter Bootstrap 的,但我相信即使不完全相同,行为也会相似。

我有一个 ASP 菜单,如下所示,它以所需的方式显示我添加的项目。我已经用适当的类设置了StaticMenuStyleStaticSelectedStyle。我还尝试了这些类的许多不同排列,但没有成功。

这是我的 ASP.net 代码:

<asp:Menu ID="NavBar" runat="server" role="tablist"
    StaticSubMenuIndent="16px" RenderingMode="List" 
    CssClass="nav nav-tabs nav-justified" Orientation="Horizontal">
    <Items>
        <asp:MenuItem Text="Home" Value="Home" Selected="True"></asp:MenuItem>
        <asp:MenuItem Text="Generation" Value="Generation"></asp:MenuItem>
        <asp:MenuItem Text="Loads" Value="Loads"></asp:MenuItem>
        <asp:MenuItem Text="Tie Line Metering" Value="Tie Line Metering"></asp:MenuItem>
        <asp:MenuItem Text="About" Value="About"></asp:MenuItem>
    </Items>
    <StaticMenuStyle CssClass="nav nav-tabs nav-justified" />
    <StaticSelectedStyle CssClass="active" />
</asp:Menu>

我包含所有正确的 &lt;link&gt;&lt;script&gt; 标签,以便引导程序工作,我知道这一点,因为我可以创建导航菜单的基本版本,并且它运行良好。唯一不起作用的是“活动”选项卡正在更改。没有 ASP 菜单的列表的准系统代码如下:

<ul class="nav nav-tabs nav-justified" role="tablist">
    <li class="active"><a>Home</a></li>
    <li><a>About</a></li>
</ul>

唯一不适用于&lt;asp:Menu&gt; 的是正确的“活动”样式CSS 类未应用于&lt;li&gt; 项目。相反,在按下按钮时,“选定”类将应用于 &lt;li&gt; 项目中的锚 (&lt;a&gt;) 标记。此处显示了所述行为,其中选择了“主页”项目。此外,在 chrome 中使用开发人员工具时,我可以手动将 &lt;li&gt; 项目添加到“活动”CSS 类中,它的行为正常。

我还有两行 jQuery 正在删除错误的类属性到菜单中,这些属性会导致 ASP 自动插入不需要的结果。它们是:

<script type="text/javascript">
    $("#NavBar ul, #NavBar ul li, #NavBar ul li a").removeClass('level1 static');
    $("#NavBar, #NavBar ul, #NavBar ul li").removeAttr('style');
</script>

很抱歉这篇冗长的帖子,但我希望我已经很好地表达了我的问题。

【问题讨论】:

【参考方案1】:

我认为您可以这样做将“选定”类添加到父 li 元素:

$('#NavBar ul li a.selected').parent().addClass('selected');

要从 a 元素中删除“选定”类,请添加为第 2 行:

$('#NavBar ul li a.selected').removeClass('selected');

【讨论】:

我只是在自己的项目中使用了这个。确切的代码行是: $('#NavigationMenu ul li a.selected').parent().addClass('active'); $('#NavigationMenu ul li a.selected').removeClass('selected');【参考方案2】:

我遇到了同样的问题并这样解决:

$(function () 
    var menu = $('#NavBar');

    // Fixes for the aspMenu so that it will work with our bootstrap implementation
    menu.find('ul')[0].style = ''; // clear the asp menu's inline styling
    menu.find('ul')[0].className = menu[0].className; // The class name needs to be on the first ul element not the container div
    menu.find('li.static').removeClass('static'); // remove the extraneous class


    menu.find('li.has-popup').addClass('dropdown') //  add the dropdown class to the popup menus
        .find('> ul').addClass('dropdown-menu').attr('style', 'display: none');  // add the appropriate class, and overwrite the extraneous inline styling

    // No styling is required on the container div
    menu[0].style = '';
    menu[0].className = '';
);

希望有帮助:)

【讨论】:

以上是关于引导程序和 ASP.NET 菜单的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从引导菜单项发送到 ASP.NET MVC 控制器

引导程序和 ASP.NET

集成引导模板的 ASP .Net MVC Web 应用程序

ASP.NET MVC 验证器无法识别引导程序 DatePicker 格式

ASP.NET MVC 视图添加样式表类或更改引导程序

增加文本框大小引导程序(ASP.NET MVC)