You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ASP.NET MVC中创建可折叠侧边栏菜单

可折叠侧边栏菜单示例

ASP.NET MVC 可折叠侧边栏菜单实现步骤

1. 布局结构(在_Layout.cshtml或单独视图中)

搭建嵌套层级的HTML结构,给带子菜单的父项添加标识:

<div class="sidebar">
    <ul class="menu">
        <!-- 带二级菜单的父项 -->
        <li class="menu-item has-submenu">
            <a href="#" class="menu-link">
                <span>仪表盘</span>
                <i class="submenu-toggle">▼</i>
            </a>
            <ul class="submenu">
                <li class="submenu-item">
                    <a href="@Url.Action("Index", "Home")" class="submenu-link">首页</a>
                </li>
                <li class="submenu-item">
                    <a href="@Url.Action("Stats", "Home")" class="submenu-link">统计数据</a>
                </li>
            </ul>
        </li>

        <li class="menu-item has-submenu">
            <a href="#" class="menu-link">
                <span>用户管理</span>
                <i class="submenu-toggle">▼</i>
            </a>
            <ul class="submenu">
                <li class="submenu-item">
                    <a href="@Url.Action("List", "Users")" class="submenu-link">用户列表</a>
                </li>
                <li class="submenu-item">
                    <a href="@Url.Action("Create", "Users")" class="submenu-link">新增用户</a>
                </li>
            </ul>
        </li>

        <!-- 无二级菜单的项 -->
        <li class="menu-item">
            <a href="@Url.Action("Index", "Settings")" class="menu-link">
                <span>系统设置</span>
            </a>
        </li>
    </ul>
</div>

2. CSS 样式

控制侧边栏布局、菜单样式及子菜单的隐藏/显示状态:

/* 侧边栏容器 */
.sidebar {
    width: 250px;
    background-color: #2c3e50;
    color: #ecf0f1;
    height: 100vh;
    position: fixed;
    top: 0;
    left: 0;
    overflow-y: auto;
}

/* 主菜单基础样式 */
.menu {
    list-style: none;
    padding: 0;
    margin: 0;
}

.menu-item {
    border-bottom: 1px solid #34495e;
}

.menu-link {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 12px 15px;
    color: #ecf0f1;
    text-decoration: none;
    transition: background-color 0.2s;
}

.menu-link:hover {
    background-color: #34495e;
}

/* 子菜单切换图标 */
.submenu-toggle {
    font-size: 12px;
    transition: transform 0.2s;
}

/* 子菜单默认隐藏 */
.submenu {
    list-style: none;
    padding: 0;
    margin: 0;
    max-height: 0;
    overflow: hidden;
    transition: max-height 0.3s ease-out;
    background-color: #34495e;
}

/* 子菜单展开状态 */
.submenu.open {
    max-height: 300px;
}

/* 子菜单项样式 */
.submenu-item {
    padding-left: 25px;
}

.submenu-link {
    display: block;
    padding: 10px 15px;
    color: #bdc3c7;
    text-decoration: none;
    transition: background-color 0.2s;
}

.submenu-link:hover {
    background-color: #2c3e50;
    color: #ecf0f1;
}

/* 展开时旋转切换图标 */
.menu-item.has-submenu.open .submenu-toggle {
    transform: rotate(180deg);
}

3. JavaScript 交互逻辑

实现点击父菜单时的折叠/展开切换:

document.querySelectorAll('.menu-item.has-submenu .menu-link').forEach(link => {
    link.addEventListener('click', function(e) {
        e.preventDefault();
        const parentItem = this.closest('.menu-item');
        const submenu = parentItem.querySelector('.submenu');
        
        // 切换展开状态类
        submenu.classList.toggle('open');
        parentItem.classList.toggle('open');
    });
});

4. MVC 路由与活跃菜单优化

  • 用@Url.Action动态生成路由链接,避免硬编码
  • 给当前页面对应的菜单添加活跃标识:
<li class="menu-item @(ViewContext.RouteData.Values["Controller"].ToString() == "Home" ? "active" : "")">
    <a href="@Url.Action("Index", "Home")" class="menu-link">
        <span>首页</span>
    </a>
</li>

添加活跃状态的CSS:

.menu-item.active .menu-link {
    background-color: #1abc9c;
    color: #fff;
}

内容的提问来源于stack exchange,提问作者Gengatharan S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 12:15:41