Допустим, у меня есть страница с моим пользовательским UserControl
(содержащим только asp:Literal
и некоторым строковым свойством) и кнопкой. Теперь я хочу изменить текст Literal при нажатии кнопки, поэтому я изменяю свойство строки моего элемента управления в событии нажатия кнопки. Как это:
//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; } }
Есть ли другой (лучший) способ сделать это? Моя настоящая проблема заключается в гораздо более сложных элементах управления, чем описано здесь, но проблема остается той же: при любой обратной передаче все свойства, установленные в обработчиках событий, игнорируются.