动态实现树形菜单

时间:2022-12-16 16:02:17

      树形菜单在开发软件和网站中经常用到,但是会遇到一个问题,在网站中当你点开的时候,由于页面刷新了,又合起来来了,这种问题是用iframe不会出现,但是在网站中很少会用到框架,最近就碰到了这样的问题,在网上找了很多js写的树形菜单,我需要分四级,但是都没找到合适的,乱七八糟的代码都有,很头疼,没办法,自己就想办法写了一个,这个是在知道分几级的情况下,关于无限极没研究,可以再基础上在下点功夫也可以!

原理大概是这样的:

第一步:需要把一级到四级样式写好,位置固定好

第二步:动态循环生成菜单,一级正常动态循环出来,二级到四级根据参数传递过来的id与上一级别的id判断是否相等来判断

           是否循环出来

看看代码吧

树形菜单是个公用的部分,我们一般会放到用户控件里,代码如下:

 

动态实现树形菜单动态实现树形菜单View Code
<%@ Control Language= " C# " AutoEventWireup= " true " CodeBehind= " protype.ascx.cs " Inherits= " Cms.Web.control.protype " %>
                <div  class= " zy_con_l ">
             <div  class= " zy_con_ltt ">品牌展示</div>
            <div  class= " zy_ppzslb ">
                <ul>
                   <%
                    Cms.BLL.Channel bll =  new Cms.BLL.Channel();
                    System.Data.DataSet dt = bll.GetList( "  KindId=1 and ParentId=0 ");
                     if (dt.Tables[ 0].Rows.Count !=  0)
                    {
                         foreach (System.Data.DataRow row  in dt.Tables[ 0].Rows)
                        {
                             string title = row[ " title "].ToString();
                             int id = Convert.ToInt32(row[ " Id "].ToString());
                     %>
                    <li><a href= ' ProductList.aspx?classId=<%=id %> '><%=title%></a>
                        <ul>
                        <%
                             if (Request.QueryString[ " classId "] !=  null && Request.QueryString[ " classid "].ToString() == id.ToString())
{

    System.Data.DataSet dt2 = bll.GetList( "  KindId=1 and ParentId= " + id);
     if (dt2.Tables[ 0].Rows.Count !=  0)
    {
         foreach (System.Data.DataRow row2  in dt2.Tables[ 0].Rows)
        {
             string title2 = row2[ " title "].ToString();
             int id2 = Convert.ToInt32(row2[ " Id "].ToString());
                                    
                                 %>
                            <li><a href= ' ProductList.aspx?classId=<%=id %>&classId2=<%=id2 %> '><%=title2%></a>
                                <ul>
                                 <%
             if (Request.QueryString[ " classId2 "] !=  null && Request.QueryString[ " classId2 "].ToString() == id2.ToString())
{
                        
System.Data.DataSet dt3 = bll.GetList( "  KindId=1 and ParentId= " + id2);
if (dt3.Tables[ 0].Rows.Count !=  0)
{

     foreach (System.Data.DataRow row3  in dt3.Tables[ 0].Rows)
    {
         string title3 = row3[ " title "].ToString();
         int id3 = Convert.ToInt32(row3[ " Id "].ToString());
                                     %>
                                    <li><a href= ' ProductList.aspx?classId=<%=id %>&classId2=<%=id2 %>&classId3=<%=id3 %> '><%=title3%></a>
                                        <ul>
                                        <%
         if (Request.QueryString[ " classId3 "] !=  null && Request.QueryString[ " classId3 "].ToString() == id3.ToString())
{                                         
System.Data.DataSet dt4 = bll.GetList( "  KindId=1 and ParentId= " + id3);
if (dt4.Tables[ 0].Rows.Count !=  0)
{

     foreach (System.Data.DataRow row4  in dt4.Tables[ 0].Rows)
    {
         string title4 = row4[ " title "].ToString();
         int id4 = Convert.ToInt32(row4[ " Id "].ToString());
                                     %>
                                            <li><a href= ' ProductList.aspx?classId=<%=id %>&classId2=<%=id2 %>&classId3=<%=id3 %>&classId4=<%=id4 %> '><%=title4%></a></li>
                                          <%}
}
} %>
                                        </ul>
                                    </li>
                                   <%}
}
} %>
                                </ul>
                            </li>
                        <%}
    }
    } %>
                        </ul>
                    </li>
                    <%
}
                        
                    }%>
                </ul>
            </div>
        </div>

 引用的页面里

 

动态实现树形菜单动态实现树形菜单View Code
<head runat= " server ">
   <title>佳音琴行</title>
<link href= " images/style.css " rel= " stylesheet " type= " text/css " />
<link href= " images/zy_home.css " rel= " stylesheet " type= " text/css " />
<style> 

*{ margin: 0; padding: 0;}
li{ list-style:none; line-height:28px;}
a{text-decoration:none;color:# 343434;border:none;}
a:hover{text-decoration:none; color:#F00;}
.zy_ppzslb{width:208px; background:url(images/zy_ppzs_lbbg.gif) repeat-y; font: " 宋体 "; font-size:12px;  float:left; padding-top:8px;}
.zy_ppzslb ul{ padding-left:15px; overflow:hidden;}
.zy_ppzslb ul li{ background:url(images/yi.gif) no-repeat  0 7px; text-indent:15px;}
.zy_ppzslb ul li ul li{ background:url(images/xtb2.gif) no-repeat  0 9px; text-indent:12px;}
.zy_ppzslb ul li ul li ul li{ background:url(images/sj.gif) no-repeat  0 9px; text-indent:12px;}
.zy_ppzslb ul li ul li ul li ul li{ background:url(images/xtb3.gif) no-repeat  0 10px; text-indent:8px;}
</style>



</head>
<body>
    <form id= " form1 " runat= " server ">
  <table width= " 990 " border= " 0 " cellspacing= " 0 " cellpadding= " 0 " bgcolor= " #FFFFFF " align= " center " style= " margin:0 auto; ">
  <tr>
    <td align= " left " valign= " top ">
        <uc1:protype ID= " protype1 " runat= " server " />
    </td>
    <td align= " left " valign= " top ">
        <div  class= " zy_con_r ">
            <div  class= " zy_con_rtt "><p>品牌展示</p><span>您当前位置:首页>品牌展示</span></div>
            <ul  class= " zy_ppzs_bot ">
             <asp:Repeater ID= " rptList " runat= " server ">
           <ItemTemplate>
                <li><a href= ' <%=GetUrl() %>id=<%#Eval("Id")%> '  class= " zy_ppzs_bot_pic "><img src= ' <%#Eval("ImgUrl") %> '  alt= ' <%#Eval("Title")%> '/></a><p  class= " zy_ppzs_bot_lbwz "><a href= ' ProductView.aspx?id=<%#Eval("Id")%> '>品牌:<%#Eval( " Title ")%><br>型号:<%#Eval( " ModelType ") %></a></p></li>

           </ItemTemplate>
            </asp:Repeater>
            </ul>
              <div  class= " spClear ">
          <asp:Label ID= " lbmsg " runat= " server "></asp:Label>
      </div>
            <div  class= " fenye "
             <webdiyer:aspnetpager ID= " AspNetPager1 " runat= " server " CssClass= " formfield " 
            CustomInfoClass= " formbutton " 
            CustomInfoHTML= " 第&lt;font color='red'&gt;&lt;b&gt;%CurrentPageIndex%&lt;/b&gt;&lt;/font&gt;页 共%PageCount%&nbsp;页 %StartRecordIndex%-%EndRecordIndex% " 
            CustomInfoTextAlign= " Center " FirstPageText= " 首页 " horizontalalign= " Center " 
            InputBoxStyle= " width:19px " LastPageText= " 尾页 " meta:resourceKey= " AspNetPager1 " 
            NextPageText= " 下一页 " PageSize= " 15 " 
            PrevPageText= " 前一页 " showcustominfosection= " Left " ShowInputBox= " Always " 
            ShowNavigationToolTip= " True " style= " FONT-SIZE: 12px " 
            SubmitButtonClass= " formfield " SubmitButtonText= " GO " width= " 506px " 
            onpagechanging= " AspNetPager1_PageChanging " PageIndexBoxType= " TextBox " 
                    ShowPageIndexBox= " Never " AlwaysShow= " True ">
        </webdiyer:aspnetpager></div>
        </div>
    </td>
  </tr>
</table>

    </form>
</body>
</html>

 

后台代码:

 

动态实现树形菜单动态实现树形菜单View Code
  public  partial  class ProductList1 : System.Web.UI.Page
    {
         public  int pcount =  0// 总条数
         public  int classId;

         protected  void Page_Load( object sender, EventArgs e)
        {
             if (! int.TryParse(Request.Params[ " classId "as  stringout  this.classId))
            {
                 this.classId =  0;
            }
             if (!Page.IsPostBack)
            {
                 this.lbmsg.Visible =  false;
                RptBind( "");
            }
             if ((Request.Params[ " classId "] !=  null) && (Request.Params[ " classId "].ToString() !=  ""))
            {
                classId = Convert.ToInt32(Request.Params[ " classId "].ToString());
                 if ((Request.Params[ " classId2 "] !=  null) && (Request.Params[ " classId2 "].ToString() !=  ""))
                {
                    classId = Convert.ToInt32(Request.Params[ " classId2 "].ToString());
                     if ((Request.Params[ " classId3 "] !=  null) && (Request.Params[ " classId3 "].ToString() !=  ""))
                    {
                        classId = Convert.ToInt32(Request.Params[ " classId3 "].ToString());
                         if ((Request.Params[ " classId4 "] !=  null) && (Request.Params[ " classId4 "].ToString() !=  ""))
                        {
                            classId = Convert.ToInt32(Request.Params[ " classId4 "].ToString());
                        }
                    }
                }
                RptBind( " ClassId in ( " + GetAllId(classId) +  " ) ");
            }
        }


         public  string GetUrl()
        {
             string url =  " ProductView.aspx? ";
             if ((Request.Params[ " classId "] !=  null) && (Request.Params[ " classId "].ToString() !=  ""))
            {
                url+=  " &classId= "+Request.Params[ " classId "].ToString();
            }
             if ((Request.Params[ " classId2 "] !=  null) && (Request.Params[ " classId2 "].ToString() !=  ""))
            {
                url +=  " &classId2= " + Request.Params[ " classId2 "].ToString();
            }
             if ((Request.Params[ " classId3 "] !=  null) && (Request.Params[ " classId3 "].ToString() !=  ""))
            {
                url +=  " &classId3= " + Request.Params[ " classId3 "].ToString();
            }
             if ((Request.Params[ " classId4 "] !=  null) && (Request.Params[ " classId4 "].ToString() !=  ""))
            {
                url +=  " &classId4= " + Request.Params[ " classId4 "].ToString();
            }
            url +=  " & ";
             return url;
        }
         ///   <summary>
        
///  获得下级的所有id
        
///   </summary>
        System.Text.StringBuilder str =  new System.Text.StringBuilder();
         int fag =  0;
         protected  string GetAllId( int classid)
        {
             if(fag== 0)
            {
            str.Append(classid+ " , ");
            }
            Cms.BLL.Channel bll =  new BLL.Channel();
            DataSet ds = bll.GetList( "  KindId=1 and ParentId= "+classid);
             foreach (DataRow row  in ds.Tables[ 0].Rows)
            {
                fag =  1;
                 int id = Convert.ToInt32(row[ " Id "].ToString());
                str.Append(id +  " , ");
                GetAllId(id);
            }
             return str.ToString().Remove(str.ToString().LastIndexOf( " , "));
        }


         #region 列表绑定
         private  void RptBind( string strWhere)
        {
            Cms.BLL.ProductInfo bll =  new Cms.BLL.ProductInfo();
            DataSet ds = bll.GetList(strWhere);
            DataView dv = ds.Tables[ 0].DefaultView;
             // 利用PAGEDDAGASOURCE类来分页
            PagedDataSource pds =  new PagedDataSource();
            AspNetPager1.RecordCount = dv.Count;
            pds.DataSource = dv;
            pds.AllowPaging =  true;
            pds.CurrentPageIndex = AspNetPager1.CurrentPageIndex -  1;
            pds.PageSize = AspNetPager1.PageSize;
             // 获得总条数
            pcount = bll.GetCount(strWhere);
             if ( this.pcount <  0)
            {
                 this.lbmsg.Visible =  true;
                 this.lbmsg.Text =  " 暂时没有产品 ";
            }
             // 绑定数据
            rptList.DataSource = pds;
            rptList.DataBind();
        }
         #endregion

         protected  void AspNetPager1_PageChanging( object src, Wuqi.Webdiyer.PageChangingEventArgs e)
        {
            AspNetPager1.CurrentPageIndex = e.NewPageIndex;
            RptBind( "");
        }
    }

这样点开的时候在刷新页面也不会隐藏了....