Как изменить свойство UserControl на PostBack? - PullRequest
0 голосов
/ 11 мая 2011

Допустим, у меня есть страница с моим пользовательским 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; } }

Есть ли другой (лучший) способ сделать это? Моя настоящая проблема заключается в гораздо более сложных элементах управления, чем описано здесь, но проблема остается той же: при любой обратной передаче все свойства, установленные в обработчиках событий, игнорируются.

Ответы [ 2 ]

3 голосов
/ 11 мая 2011

Перемещение всей логики с Page_Load на Page_PreRender решило проблему. Теперь свойства устанавливаются перед выполнением логики. Я подожду других ответов, чтобы проверить, есть ли лучшее решение и есть ли недостатки использования Page_PreRender.

0 голосов
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...