Sınırsız Kategori (Menü) Yapımı ASP.NET

Merhabalar,

Asp.Net Web Form ile sınırsız menü yapımı kodlarını aşağıda bulabiliriz. 2010 yılında bu şekilde anlatımı tercih etmişim.. sizler Ado.Net yerine Entity Framework  veya Dapper ORM'yi tercih ederek kodlama yapabilirsiniz. MVC'de biraz farklı olabilir html ul özelliğine runat server diyerek web.form'da ulaşır iken mvc'de viewbag veya model'de bir list objesi tutarak foreach ile yapabilirsiniz.

DB TABLO SCRIPT:

CREATE TABLE tCategory
(  
  tCategoryID INT IDENTITY(1,1) NOT NULL,   
  ParentID INT NULL,   
  CategoryName NVARCHAR(50) NULL
)


HTML KODLARI :

<html>
<head>    
<title>Sınırsız Kategori | ul, li</title>
</head>
<body>    
 <form id="form1" runat="server">    
    <div>
       <ul id="Menu1" runat="server"></ul>
    </div>    
 </form>
</body>
</html>


C# KODLARI

using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    DataSet ds = new DataSet();

    protected void Page_Load(object sender, EventArgs e)
    {
        doldur();
    }

    private void doldur()
    {
        SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM tCategory", ConfigurationManager.ConnectionStrings["Baglan"].ConnectionString);

        da.Fill(ds);

        DataRow[] anaKategoriler = ds.Tables[0].Select("ParentID= 0");

        foreach (DataRow anaKategori in anaKategoriler)
        {
            HtmlGenericControl li = new HtmlGenericControl("li");
            li.Controls.Add(new LiteralControl("<a href='<%#Eval('tCategoryID')%>'>" + anaKategori["CategoryName"].ToString() + "</a>"));
            Menu1.Controls.Add(li);
            altmenu(Convert.ToInt32(anaKategori["tCategoryID"]));
        }
    }

    private void altmenu(int kategoriId)
    {
        DataRow[] kategoriler = ds.Tables[0].Select("ParentID=" + kategoriId);

        if (kategoriler.Length != 0)
        { 
            Menu1.Controls.Add(new LiteralControl("<ul>"));

            foreach (DataRow kategori in kategoriler)
            {
                HtmlGenericControl li1 = new HtmlGenericControl("li");
                li1.Controls.Add(new LiteralControl("<a href='#'>" + kategori["CategoryName"].ToString() + "</a>"));
                Menu1.Controls.Add(li1);
                altmenu(Convert.ToInt32(kategori["tCategoryID"]));
            }

            Menu1.Controls.Add(new LiteralControl("</ul>"));
        }
    }
}


ÇIKTISI: