如何在PostBack上更改UserControl的属性?

时间:2011-05-11 09:37:42

标签: asp.net user-controls event-handling

假设我的页面包含我的自定义UserControl(仅包含asp:Literal和一些字符串属性)和一个按钮。现在我想在按钮单击时更改Literal的文本,因此我在按钮单击事件中更改了控件的字符串属性。像这样:

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

问题是我的Literal保持不变,因为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; } }

还有其他(更好)的方法吗?我真正的问题涉及比这里描述的更复杂的控件,但问题仍然是相同的:在任何回发中,事件处理程序中设置的所有属性都将被忽略。

2 个答案:

答案 0 :(得分:3)

将所有逻辑从Page_Load移至Page_PreRender解决了问题。现在,在逻辑执行之前设置属性。我会等待其他答案检查是否有更好的解决方案以及使用Page_PreRender是否有任何缺点。

答案 1 :(得分:0)