假设我的页面包含我的自定义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; } }
还有其他(更好)的方法吗?我真正的问题涉及比这里描述的更复杂的控件,但问题仍然是相同的:在任何回发中,事件处理程序中设置的所有属性都将被忽略。
答案 0 :(得分:3)
将所有逻辑从Page_Load
移至Page_PreRender
解决了问题。现在,在逻辑执行之前设置属性。我会等待其他答案检查是否有更好的解决方案以及使用Page_PreRender
是否有任何缺点。
答案 1 :(得分:0)