【发布时间】:2011-05-11 09:37:42
【问题描述】:
假设我有一个页面,其中包含我的自定义 UserControl(仅包含 asp: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; } }
还有其他(更好的)方法可以做到这一点吗?我真正的问题涉及比这里描述的更复杂的控件,但问题仍然存在:在任何回发时,事件处理程序中设置的所有属性都被忽略。
【问题讨论】:
标签: asp.net user-controls event-handling