2011-04-09 41 views
0
  1. 我有一個UpdatePanel。
  2. 我在這個UpdatePanel中有一個PlaceHolder。
  3. 有許多UserControls。其中一個將被動態加載, 根據一些選擇。如何在這種情況下訪問UserConrtorl的控件

    Control mycontrol = this.Page.LoadControl("myusercontrol.ascx"); 
    myplaceholder.Controls.Add(mycontrol); 
    
  4. 加載特定的用戶控件後,我希望得到書面的 一個TextBox是從父頁面加載的用戶控件的文本。

    TextBox mytextbox = (TextBox) Page.FindControl("myusercontrol") 
        .FindControl("mytextbox"); 
    

問題是文本始終是空的!

我錯過了什麼? 我感謝您的幫助。

+0

可能您希望獲得發佈數據。我認爲可能問題在於你添加了哪些控件。您需要在PageInit上甚至之前添加控件,並在Page_Load上請求它們。當你問他們內部的數據時,頁面已經準備好通過這個獲得並將它們放在控件上。 – Aristos 2011-04-09 18:23:08

+0

問題在於UserControl將在稍後加載,之後我單擊一個按鈕。然後,我將在放置在UserControl中的TextBox中寫入一些內容。之後,我想從放置在父頁面的另一個控件訪問TextBox.text。所以我該怎麼做 ? – HTB 2011-04-09 20:16:57

回答

0

當你說text is always empty,確實意味着TextBox對象爲null或者字面意義上文本框的.Text爲空?

請記住,在Web應用程序中,您必須回發到服務器以刷新結果並更新控件等等。

嘗試發回服務器並查看是否有幫助。

+0

不,我可以得到TextBox對象。但.Text始終是空的。 – HTB 2011-04-09 20:18:46

+0

..其實我試圖從服務器控件(Button)中獲取.Text,所以有一個回發。 – HTB 2011-04-09 20:20:31

1

如前所述,您應該加載您的UserControl覆蓋OnInit。爲什麼你看整個頁面找到UserControl?您可以使用PlaceHolder.Controls ...

這我得到了它的工作

protected override void OnInit(EventArgs e) 
{ 
    Control userControl = this.Page.LoadControl("WebUserControl.ascx"); 
    testPlaceHolder.Controls.Add(userControl); 
    userControl.ID="id"; 
    base.OnInit(e); 
} 
protected void testButton_Click(object sender, EventArgs e) 
{ 
    Control testUserControl = (Control)testPlaceHolder.Controls[0]; 
    //Control testUserControl=(Control)testPlaceHolder.FindControl("id"); 
    TextBox mytextbox = (TextBox)testUserControl.FindControl("testTextBox"); 
    testButton.Text = mytextbox.Text; 
} 
+0

是的。而已 。您必須將其加載到OnInit或Page_Load中。我這樣做後,一切都變得非常有光澤。 – HTB 2011-04-14 00:17:27

0

你有沒有考慮增加一個屬性,用戶控件返回的文本?

如:

public class YourControl : UserControl 
{ 

    public string Text 
    { 
    get 
    { 
     return this.TextBox1.Text; 
    } 
    } 
} 
0

通常情況下,用戶控件用於封裝 - 你包的控制,在UC以便其他代碼的行爲等所有的細節沒有處理它。

通過直接引用UC內的控件 - 通過名稱或ID - 您打破了模型。我可以建議你不要這樣做,而是如果你需要從UC獲取信息,你可以添加一個容器可以調用的屬性,事件或方法。

這樣,如果您需要更改UC控件名稱,類型,樣式或其他邏輯以後使用 - 您只需要在UC中更改該屬性/事件/方法,而不是在(例如)它可能在代碼中使用了100個地方。

如果您可以讓我們知道爲什麼您需要這些信息或關於該示例的更多具體細節,也許我們可以建議一些代碼來實現此功能。

0

那麼,我該怎麼辦?

只需手動獲取發佈的值。

Request.Form[yourcondeol.UniqueID] 

通過調試這個你可以看到所有的發佈數據。

Request.Form