2014-03-27 69 views
0

所以我想了解一些關於使用C#構建頁面的知識,以及那些我真的無法得到的東西。 我有以下代碼:在代碼隱藏中添加按鈕代理內部的按鈕

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

public partial class _Default : System.Web.UI.Page 
{ 
    UpdatePanel mainContainer = new UpdatePanel(); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     Label someText = new Label(); 
     someText.Text = "text"; 
     LinkButton someLink = new LinkButton(); 
     someLink.Text = "first link"; 
     someLink.Click += delegate { 
      Label someText2 = new Label(); 
      someText2.Text = "text2"; 
      LinkButton someLink2 = new LinkButton(); 
      someLink2.Text = "second link"; 
      someLink2.Click += delegate { 

       Label someText3 = new Label(); 
       someText3.Text = "text3"; 
       LinkButton someLink3 = new LinkButton(); 
       someLink3.Text = "third link"; 
       mainContainer.ContentTemplateContainer.Controls.Add(someText3); 
       mainContainer.ContentTemplateContainer.Controls.Add(someLink3); 

      }; 
      mainContainer.ContentTemplateContainer.Controls.Add(someText2); 
      mainContainer.ContentTemplateContainer.Controls.Add(someLink2); 

     }; 


     form1.Controls.Add(mainContainer); 
     mainContainer.ContentTemplateContainer.Controls.Add(someText); 
     mainContainer.ContentTemplateContainer.Controls.Add(someLink); 
    } 
} 

總而言之,它應該給的東西很簡單,一個UpdatePanel充當包含包裝:一個「文本」的字符串,然後「第一鏈接」的鏈接和點擊在「第一個鏈接」應該附加另一個字符串和另一個鏈接旁邊的最初的。反過來,這第二個鏈接應該添加一個新的第三個字符串和一個新的第三個鏈接。但是,點擊第二個鏈接只會導致從DOM中刪除第二個文本和第二個鏈接。我甚至不能在委託中爲第二個鏈接創建斷點。我真的不知道爲什麼會發生這種情況。有任何想法嗎?

我的意圖是不斷添加html對象到基於點擊程序添加對象的網站,這是不是psibible?

+0

對不起 - ASP.NET是沒有的WinForms :)控制樹有在每次回發後都會重新創建。 –

+0

控制樹必須重新創建?我是否需要在新的UpdatePannel中添加新元素? – Axel

+0

是的 - ASP.NET記住它從http POST請求獲取的內容 - 即表單字段,cookie和查詢字符串參數。一個特別有趣的表單域是ViewState - 您可以使用它來保持狀態。控制樹(所有動態添加的控件)都以與第一個請求相同的狀態回發 - 除非您根據某些信息(通常爲ViewState)重新創建它們。 –

回答

0

爲了更好地兌現了主意:

假設你有兩個控件控制/ Control1.ascx和控制/ Control2.ascx

<asp:ScriptManager runat="server" /> 
<asp:UpdatePanel ID="updatePanel" runat="server"> 
    <ContentTemplate> 
     <asp:LinkButton runat="server" Text="PressMe 1" OnClick="ChangePage_Click" CausesValidation="false" CommandArgument="~/Controls/Control1.ascx" /> 
     <asp:LinkButton runat="server" Text="PressMe 2" OnClick="ChangePage_Click" CausesValidation="false" CommandArgument="~/Controls/Control2.ascx" /> 
     <asp:PlaceHolder runat="server" ID="placeholder" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 


protected void Page_Load(object sender, EventArgs e) { 
    if (IsPostBack && !string.IsNullOrEmpty(ActiveControl)) { 
    placeholder.Controls.Clear(); 
    placeholder.Controls.Add(LoadControl(ActiveControl)); 
    } 
} 

protected string ActiveControl { 
    get { return (string)ViewState["ActiveControl"]; } 
    set { ViewState["ActiveControl"] = value; } 
} 

protected void ChangePage_Click(object sender, EventArgs e) { 
    var control = (IButtonControl)sender; 
    ActiveControl = control.CommandArgument; 
    placeholder.Controls.Clear(); 
    placeholder.Controls.Add(LoadControl(control.CommandArgument)); 
} 
+0

哇,佔位符很好地做了這個伎倆,tysm我一直在與此戰鬥一段時間 – Axel