2011-05-11 40 views
0

比方說,我有一個自定義UserControl(僅包含asp:Literal和一些字符串屬性)和一個按鈕的頁面。現在我想改變Literal的按鈕點擊文本,所以我改變了我的控件的按鈕點擊事件的字符串屬性。就像這樣:如何在PostBack上更改UserControl的屬性?

//in aspx 
protected void Button1_Click(object sender, EventArgs e) 
{ 
    testControl.Text = "triggered"; 
} 

問題是我的文字保持不變,因爲第一Page_Load事件觸發,並創建我的自定義控制,那麼Button_Clicked火災和改變屬性,但作爲已經創建的控制,它什麼都不做。這背後是我的控制代碼:

public partial class TestControl : System.Web.UI.UserControl 
{ 
    public string Text { get; set; } } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     lblTest.Text = Text; 
    } 
} 

我想通了,如果我在自定義控件移動任何邏輯從Page_Load財產二傳手它會改變像預期。像這樣:

public string Text { get { return lblTest.Text; } set { lblTest.Text = value; } } 

是否有任何其他(更好)的方法來做到這一點?我的真正問題涉及比這裏描述的更復雜的控件,但問題仍然相同:在任何回發中,在事件處理程序中設置的所有屬性均被忽略。

回答

3

Page_LoadPage_PreRender移動所有的邏輯解決了這個問題。現在屬性在邏輯執行之前設置。我會等待其他答案,檢查是否有更好的解決方案,以及是否存在使用Page_PreRender的任何缺點。

+0

聽起來對我來說是個好主意 – tjrobinson 2011-05-11 10:11:56

0
+0

這不完全是我的問題,我想。問題是在回發期間使用屬性來改變它們。順便說一句,爲了在回發之間保留任何數據,我通常使用如下所示:'public string Text {get {return(string)ViewState [「Text」];} set {ViewState [「Text」] = value; }'。它似乎對基本屬性起作用,但我不確定是否在任何情況下;)。 – Episodex 2011-05-11 10:10:16

相關問題