如何在 asp 中使用两个中继器

How to work with two repeaters in asp

我在 asp 中有一个用中继器制作的菜单,菜单的第一行正在工作,我想在第二个中继器的菜单中添加下拉选项,但是从class 我无法访问 Repeater2

<asp:Repeater id="Repeater1"  runat="server" >
   <itemtemplate runat="server">
       <ul class="rmenue" runat="server">
           <li><a>
               <asp:Label  runat="server"  ID="Label1" 
                    text='<%# Eval("_name") %>' CommandArgument='<%# Eval("_url") %>' />

               <asp:Repeater id="Repeater2"  runat="server" >
                  <itemtemplate runat="server">
                     <ul class="menue" runat="server">
                        <li><a>
                           <asp:Label  runat="server"  ID="Label2" 
                                  text='<%# Eval("_name") %>' CommandArgument='<%# Eval("_url") %>' />
                        </a></li> 
                      </ul>
                   </itemtemplate>
               </asp:Repeater>
           </a></li> 
       </ul>
    </itemtemplate>
 </asp:Repeater>


public partial class Master : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {

        List<Buttons> ds = new List<Buttons>();
        ds.Add(new Buttons("Home", "blahbla"));
        ds.Add(new Buttons("ACCOUNTS", "blahbla"));
        ds.Add(new Buttons("ACCOUNTS", "blahbla"));
        ds.Add(new Buttons("PLAT", "blahbla"));
        ds.Add(new Buttons("EDU", "blahbla"));
        ds.Add(new Buttons("ABOUT", "blahbla"));
        ds.Add(new Buttons("CONTACT US", "blahbla"));


        Repeater1.DataSource = ds;
        Repeater1.DataBind();
    }
}
public class Buttons
{

    public string _name { get; set; }
    public string _url { get; set; }
    public ArrayList<Buttons> drop = new ArrayList<Buttons>();\this is the data for the second repeater
    public Buttons() { }
    public Buttons(string name,string url) {
        this._name = name;
        this._url = url;
    }

}

你可以做到这一点,但你需要在后面的代码中完成。

在您的 1st Repeater 中,您需要一个 OnItemDataBound 事件; OnItemDataBound="Repeater1_ItemDataBound"

在代码隐藏中:

protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        var repeater2 = (Repeater)e.Item.FindControl("Repeater2");
        //now you can bind etc to repeater2
    }
}