asp.net(C#)生成无限级别菜单

生成无限级别菜单是一个常见的需求,而使用ASP.NET(C#)实现无限级别菜单可以通过递归来解决。以下是实现过程的详细攻略:

创建数据库表

首先,需要在数据库中保存菜单数据,可以通过如下的SQL语句来创建一个menu数据表:

CREATE TABLE [dbo].[menu](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [name] [varchar](50) NOT NULL,
    [url] [varchar](200) NULL,
    [parent_id] [int] NULL,
CONSTRAINT [PK_menu] PRIMARY KEY CLUSTERED
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

添加数据

然后,向menu表中添加一些示例数据,例如:

insert [dbo].[menu] values('菜单一','/Menu1',0)
insert [dbo].[menu] values('子菜单一','/Menu1/Menu11',1)
insert [dbo].[menu] values('子菜单二','/Menu1/Menu12',1)
insert [dbo].[menu] values('子菜单三','/Menu1/Menu13',1)
insert [dbo].[menu] values('菜单二','/Menu2',0)
insert [dbo].[menu] values('子菜单四','/Menu2/Menu21',5);
insert [dbo].[menu] values('子菜单五','/Menu2/Menu22',5)

数据库连接

在C#中,要使用ADO.NET来连接数据库,使用代码如下:

using System.Data.SqlClient;
using System.Configuration;
string connectionString = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(connectionString);

创建菜单类

可以通过创建一个Menu类来存储菜单信息,如下所示:

public class Menu {
    public int Id { get; set; }
    public string Name { get; set; }
    public string Url { get; set; }
    public int ParentId { get; set; }
    public List<Menu> Children { get; set; }
}

递归获取数据

使用下面的代码来从数据库中获取菜单数据:

public List<Menu> GetAllMenus() {
    List<Menu> menus = new List<Menu>();
    string query = "SELECT id, name, url, parent_id FROM menu";
    SqlDataReader reader;
    using (SqlCommand cmd = new SqlCommand(query, conn)) {
        conn.Open();
        reader = cmd.ExecuteReader();

        while (reader.Read()) {
            Menu menu = new Menu {
                Id = Convert.ToInt32(reader["id"]),
                Name = reader["name"].ToString(),
                Url = reader["url"].ToString(),
                ParentId = Convert.ToInt32(reader["parent_id"])
            };
            menus.Add(menu);
        }
        reader.Close();
        conn.Close();
    }
    return menus;
}

递归生成菜单

使用如下的代码来递归生成菜单:

public void CreateMenu(List<Menu> menus, int parentId, ref Panel panel) {
    foreach (Menu menu in menus.Where(x => x.ParentId == parentId)) {
        HyperLink link = new HyperLink();
        link.Text = menu.Name;
        link.NavigateUrl = menu.Url;
        panel.Controls.Add(link);
        if (menus.Any(x => x.ParentId == menu.Id)) {
            Panel subMenu = new Panel();
            subMenu.CssClass = "sub-menu";
            panel.Controls.Add(subMenu);
            CreateMenu(menus, menu.Id, ref subMenu);
        }
    }
}

然后在aspx页面中使用以下的代码控件来显示菜单:

<asp:Panel ID="MainMenu" runat="server"></asp:Panel>

在页面加载时,调用以下代码即可生成无限级别菜单:

protected void Page_Load(object sender, EventArgs e) {
    List<Menu> menus = GetAllMenus();
    CreateMenu(menus, 0, ref MainMenu);
}

例如,以上数据添加到数据库后,会生成以下的两个菜单:

菜单一
- 子菜单一
- 子菜单二
- 子菜单三

菜单二
- 子菜单四
- 子菜单五

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:asp.net(C#)生成无限级别菜单 - Python技术站

(0)
上一篇 2023年5月31日
下一篇 2023年5月31日

相关文章

  • Unity实现鼠标双击与长按的检测

    下面是Unity实现鼠标双击与长按的检测的完整攻略。 检测鼠标双击 要在Unity中检测鼠标双击,可以使用以下步骤: 在需要检测双击的对象上添加组件EventSystem; 在需要检测双击的对象上添加组件InputField; 通过代码实现鼠标双击的检测。 以下是一个简单的示例代码,实现了在鼠标双击时输出一段提示信息: public class Double…

    C# 2023年6月3日
    00
  • C#中倒序输出字符串的方法示例

    下面是关于C#中倒序输出字符串的方法示例的完整攻略: 1. 使用Array.Reverse方法 下面是一个使用Array.Reverse方法的示例代码: string input = "Hello World"; char[] inputArray = input.ToCharArray(); Array.Reverse(inputArr…

    C# 2023年6月7日
    00
  • C#调用JS的几种方法

    下面我将详细讲解C#调用JS的几种方法,并提供两个示例说明。 目录 通过WebBrowser控件调用 通过接口调用 通过JavaScriptSerializer序列化调用 示例说明 示例一:通过WebBrowser控件调用 示例二:通过接口调用 通过WebBrowser控件调用 WebBrowser控件可以加载本地HTML文件,也可以通过设置Navigate…

    C# 2023年6月3日
    00
  • .Net Core WebApi部署到Windows服务器上的步骤

    部署.NET Core WebApi到Windows服务器上的步骤如下: 在Windows服务器上安装.NET Core运行时环境。 在Windows服务器上安装IIS。 在Windows服务器上安装ASP.NET Core Module。 在Windows服务器上创建一个新的网站。 配置网站以使用ASP.NET Core Module。 将WebApi部署…

    C# 2023年5月16日
    00
  • c# 开发文字识别软件

    C#开发文字识别软件攻略 1. 确定需求和选取OCR引擎 在开始C#开发文字识别软件之前,我们需要明确需求和选择OCR(Optical Character Recognition,光学字符识别)引擎。OCR引擎是用来识别图片中的文字,将其转换为文本形式的工具。OCR引擎有很多种,我们需要根据实际需求选择适合的引擎。 常见的OCR引擎有Tesseract、百度…

    C# 2023年5月15日
    00
  • c# 连接字符串数据库服务器端口号 .net状态服务器端口号

    连接字符串指的是用来连接数据库的字符串。C#连接字符串数据库服务器端口号.Net状态服务器端口号的完整攻略如下: 打开 Visual Studio 后,创建一个 C# 项目。 在项目中添加用于连接数据库的 DLL 文件。 在代码中编写连接字符串。连接字符串的格式为: Data Source=[服务器名称\实例名称];Initial Catalog=[数据库名…

    C# 2023年6月2日
    00
  • 讲解.NET环境下绘制模糊数学中隶属函数分布图第1/5页

    讲解.NET环境下绘制模糊数学中隶属函数分布图 模糊数学中的隶属函数分布图用于表示某一事物的隶属度。在.NET环境下,我们可以通过使用各种绘图工具来实现该图形的绘制。 准备工作 在绘制隶属函数分布图之前,需要准备好以下工作: 安装Visual Studio开发环境 引用.NET相关的绘图库 准备好样本数据,确定隶属度分配规则 绘制示例1:基于MATLAB的模…

    C# 2023年6月7日
    00
  • selenium.chrome写扩展拦截或转发请求功能

    针对selenium.chrome写扩展拦截或转发请求功能的完整攻略,包括以下步骤: 步骤一:安装Selenium和ChromeDriver 在使用Selenium对Chrome进行操作之前,需要先安装Selenium和ChromeDriver。具体方法如下: 安装Selenium pip install selenium 安装ChromeDriver 在官…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部