希望实现的格式显示    <h1 id="bar1" onclick="menuclick('submenu1','bar1');">一级栏目名称1</h1>
    <ul id="submenu1">
    <li><a href="">一级栏目1子栏目名称1</a></li>
    <li><a href="">一级栏目1子栏目名称2</a></li>
    <li><a href="">一级栏目1子栏目名称3</a></li>
    </ul>
    <h1 id="bar2" onclick="menuclick('submenu2','bar2');">一级栏目名称2</h1>
    <ul id="submenu2">
    <li><a href="">一级栏目2子栏目名称1</a></li>
    <li><a href="">一级栏目2子栏目名称2</a></li>
    <li><a href="">一级栏目2子栏目名称3</a></li>
    </ul>
前台代码
 <asp:Repeater ID="RepClass" runat="server" OnItemDataBound="RepClass_ItemDataBound">
        <ItemTemplate>
        <asp:HiddenField ID="txtClassLayer" runat="server" Value='<%#Eval("ChannelLayer") %>' />
        <asp:HiddenField ID="txtClassName" runat="server" Value='<%#Eval("ChannelName") %>' />
        <asp:HiddenField ID="txtClassID" runat="server" Value='<%#Eval("ChannelID") %>' />
        <asp:Literal ID="LitFirst" runat="server"></asp:Literal>
        </ItemTemplate>
    </asp:Repeater>
后台代码
 protected void RepClass_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
        {
            
            Literal LitFirst = (Literal)e.Item.FindControl("LitFirst");
            HiddenField txtClassLayer = (HiddenField)e.Item.FindControl("txtClassLayer");
            HiddenField txtClassName = (HiddenField)e.Item.FindControl("txtClassName");
            HiddenField txtClassID=(HiddenField)e.Item.FindControl("txtClassID");
            string LitStyle = "<ul>{1}</ul>";
            string LitImg1 = txtClassName.Value;
            string LitImg2 = "<li>" + LitImg1 + "</li>";
            int classLayer = Convert.ToInt32(txtClassLayer.Value);
            if (classLayer == 1)
            {
                LitFirst.Text = "<h1><a href='Categroy.aspx?cid=" + Convert.ToInt32(txtClassID.Value) + "'>" + LitImg1 + "</a></h1>";
            }
            else
            {
                LitFirst.Text = string.Format(LitStyle, classLayer * 18, LitImg2, LitImg1);
            }
            
        }
    }
现在只能做成这样的格式 不是希望的格式,请高手帮忙改下代码
 <h1>一级栏目名称1</h1>
<ul><li>一级栏目名称1子栏目名称1</li></ul>
<ul><li>一级栏目名称1子栏目名称2</li></ul>
<ul><li>一级栏目名称1子栏目名称3</li></ul>

解决方案 »

  1.   

    不感觉这样太麻烦了么?
    你直接在item里写好,你的菜单模式,直接把值绑定就OK啦,不用在后台拼接html的
      

  2.   


    里边有ID这个自动变化的值id="bar1" 
      

  3.   

    Repeater 嵌套Repeater  。  用2个存储过程。。  一个父级数据绑定到第一个Repeater里面。第二个根据父级的内容查子级的存储过程绑定到第二个Repeater 就OK了。。
    。。
      

  4.   

    希望id="bar1" 这个ID可以对应等于大栏目的ID号
      

  5.   

    能不能从数据库里获取到?
    如果可以,你直接从数据库里获取嘛
    onclick事件可以在后台指定的,这参数就肯定可以解决嘛
      

  6.   


                     for (int i = 0; i < repeater.items.Count ; i++)
                    {
    这里查找你绑定数据的控件,假定查找出来的是Ctrols
                                                 Ctrols.Attributes.Add("onclick", "javascript:alertinfo('alertdiv','" + id + "');");
                            Ctrols.Attributes.Add("style", "cursor:hand");                                    }         
    你参考下,临时写的
      

  7.   

        <asp:Repeater ID="Repeater1" runat="server" OnItemDataBound="Repeater1_ItemDataBound">
            <ItemTemplate>
                <asp:HiddenField ID="txtClassID" runat="server" Value='<%#Eval("ChannelID") %>' />
                <h1 id="bar<%#Container.ItemIndex %>" onclick="menuclick('submenu<%#Container.ItemIndex %>','bar<%#Container.ItemIndex %>');">
                    <%#Eval("numename1") %>
                </h1>
                <ul id="submenu<%#Container.ItemIndex %>">
                    <asp:Repeater ID="Repeater2" runat="server">
                        <ItemTemplate>
                            <li><a href="">
                                <%#Eval("numename2") %>
                            </a></li>
                        </ItemTemplate>
                    </asp:Repeater>
                </ul>
            </ItemTemplate>
        </asp:Repeater>
            protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                HiddenField txtClassID = (HiddenField)e.Item.FindControl("txtClassID");
                Repeater rep = (Repeater)e.Item.FindControl("Repeater2");
                /*绑定二级菜单的Repeater*/
            }
    不知道理解的对不对
      

  8.   

    嗯另外可以动态输出html....拼接html来做菜单。
      

  9.   

     protected void Page_Load(object sender, EventArgs e)
            {  
                if(!IsPostBack)
                  {
                    getLeaveMessage();
                  }
               
            }        void getLeaveMessage() 
            {
                this.rpt.DataSource = new YiCheng9090.BusinessLogicLayer.LeaveMessageService().getLeaveMessage();
                this.rpt.DataBind();
                
            }
     protected void rpt_ItemDataBound(object sender, RepeaterItemEventArgs e)
            {
                if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
                {
                    Repeater rptProduct = (Repeater)e.Item.FindControl("rpt2");
                    //找到分类Repeater关联的数据项 
                    //DataRowView rowv = (DataRowView)e.Item.DataItem;
                    HiddenField hid = e.Item.FindControl("hid") as HiddenField;
                    string id = hid.Value;
                    rptProduct.DataSource = new YiCheng9090.BusinessLogicLayer.LeaveMessageService().getReply(Convert.ToInt32(id));
                    rptProduct.DataBind();            }        }
     html 
      在向模版里面添加
     <asp:HiddenField ID="hid" runat="server" Value='<%#Eval("id")%>' />
    然后嵌套一个Repeater 就可以了