2013-07-05 63 views
2

我堅持以下issue.I've google了很多,想盡各種方法,但未能解決問題無法讀取值從動態創建控制

我動態創建的控制和讀數值之後,從動態創建控制

但每次出現錯誤「對象引用未設置爲對象的實例」意味着我無法找到控件,即使它在頁面上可用。

這裏是我的代碼

protected void Button1_Click(object sender, EventArgs e) 
{ 



TextBox txt = new TextBox(); 
    txt.ID = "myText"; 
    txt.ViewStateMode = System.Web.UI.ViewStateMode.Enabled; 
    Panel1.Controls.Add(txt); 

} 

protected void Button2_Click(object sender, EventArgs e) 
{ 

     TextBox txt = Panel1.FindControl("myText") as TextBox; 

     Response.Write(txt.Text); 

} 

這裏是aspx頁面代碼:

<div> 
    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 

    <asp:Panel ID="Panel1" runat="server"></asp:Panel> 

    <asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click"/> 
</div> 

回答

2

那是因爲你創建控件被點擊Button1時,再嘗試點擊Button2時訪問它。動態控件必須在上創建,因爲該狀態未被維護,所以每回發一次。而不是只是建立在Button1點擊控制,在Session設置一個標誌,所以你知道在Load重建它。所以,在Button1_Click,在方法的盡頭,加入這一行:

Session["BuildMyText"] = true; 

,然後在Page_Load

if (Session["BuildMyText"] != null && (bool)Session["BuildMyText"]) 
{ 
    // build the text box here too 
} 

,最後,自動換行建設Button1_Click像這樣:

if (Session["BuildMyText"] != null && (bool)Session["BuildMyText"]) 
{ 
    ... 
} 
0

您需要重新創建第e控件如下:

protected void Button2_Click(object sender, EventArgs e) 
    { 
     TextBox txt = new TextBox(); //add this line 
     TextBox txt = Panel1.FindControl("myText") as TextBox; 

     Response.Write(txt.Text); 

    } 
+0

Ubaid。這是不可能的 –

+0

你是對的@Sandy ... :)現在我知道爲什麼,文本框超出範圍 –