2012-09-27 48 views
3

我在ASP.NET 3.5中創建了LoginView ASP.NET控件的「克隆」,供我們公司需要,並且我試圖瞭解它是如何實現用相同的方式設置控件的能力ID在不同的模板中。 例如,這是ASPX標記與LoginView控件:ASP.NET與內容模板的自定義控件

<asp:LoginView ID="lv" runat="server"> 
     <AnonymousTemplate> 
      <asp:Label ID="lbl" runat="server" /> 
     </AnonymousTemplate> 
     <LoggedInTemplate> 
      <asp:Label ID="lbl" runat="server" /> 
     </LoggedInTemplate> 
    </asp:LoginView> 

這是有效的標記和頁面正常工作。
現在我創造了我的自定義控制:

[ParseChildren(true)] 
    [PersistChildren(false)] 
    public class ContentControl : Panel 
    { 
     [PersistenceMode(PersistenceMode.InnerProperty)] 
     public PlaceHolder AnonymousView { get; set; } 

     [PersistenceMode(PersistenceMode.InnerProperty)] 
     public PlaceHolder LoggedinView { get; set; } 

     public ContentControl() 
     { 
      this.Init += new EventHandler(ContentControl_Init); 
     } 

     void ContentControl_Init(object sender, EventArgs e) 
     { 
      if (AnonymousView == null) 
      { 
       AnonymousView = new PlaceHolder(); 
      } 

      if (LoggedinView == null) 
      { 
       LoggedinView = new PlaceHolder(); 
      } 

      this.Controls.Add(AnonymousView); 
      this.Controls.Add(LoggedinView); 

      AnonymousView.ID = "AnonymousView"; 
      LoggedinView.ID = "LoggedinView"; 

      AnonymousView.Visible = !MyContext.IsLogged; 
      LoggedinView.Visible = MyContext.IsLogged; 
     } 
    } 

現在,當我用我的控制有下面的標記,我收到一個以ID「LBL」控制誤差存在不止一次頁:

<TL:ContentControl ID="c" runat="server" CssClass="dd"> 
     <AnonymousView> 
      AnonymousView 
      <asp:Label ID="lbl" runat="server" /> 
     </AnonymousView> 
     <LoggedinView> 
      LoggedinView 
      <asp:Label ID="lbl" runat="server" /> 
     </LoggedinView> 
    </TL:ContentControl> 

我如何允許在兩個模板中使用相同的ID控件?

回答

相關問題