2016-12-14 6 views
0

私はaspのリピータで作成しているメニューを持っていて、メニューの最初の行が機能しています。メニューにドロップダウンオプションを追加したいのですが、クラスから私はRepeater2へのアクセス権を持っていません。aspで2つのリピータを使用する方法

<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; 
    } 

} 
+0

ASPを使用しないのはなぜ? – mybirthname

答えて

0

これは実現できますが、コードの背後にある必要があります。

1番目のリピータでは、OnItemDataBoundイベントが必要です。分離コードでOnItemDataBound="Repeater1_ItemDataBound"

:DropDownListコントロール制御:

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 
    } 
} 
+0

これはうまく動作しますが、すべてのdropDownsに対して同じオプションが与えられます。 メインメニューのオプションごとに別の方法で表示する方法はありますか?またはそれをやっている途中でそれがないのですか? – user3570713

+0

各リピーター項目は同じコントロールを持っていますが、これらは前の反復または次の反復から完全に分離されています。 Repeater2に同じデータソースを与えるとRepeater1を繰り返し実行するたびに同じコンテンツが吐き出されるようになります。 –

関連する問題