Обновите общедоступное свойство пользовательского элемента управления при нажатии кнопки ссылки. - PullRequest
0 голосов
/ 04 февраля 2011

Я создал очень простой пользовательский элемент управления календаря, который содержит открытое свойство, которое используется для определения, какой месяц / год отображать.Мой элемент управления календаря находится внутри другого элемента управления ascx (по сути, элемента управления-оболочки), который включает элементы управления LinkButton, используемые для переключения элемента управления календаря вперед и назад по одному месяцу за раз.Если я явно определю свойство SelectedDateTime элемента управления календаря в элементе управления оболочкой во время разработки, соответствующий месяц / год будут отображаться элементом управления календаря.Однако, когда я пытаюсь установить значение свойства во время выполнения, используя событие Click на предыдущем и следующем элементах управления LinkButton, элемент управления Calendar никогда не получает новое значение SelectedDateTime, которое я пытаюсь присвоить ему.

Когда яПри запуске кода в режиме отладки событие Click LinkButton всегда происходит последним - после того, как значение свойства SelectedDateTime элемента управления календаря уже установлено в значение по умолчанию и обработано.Чего мне не хватает?

Элемент управления календаря помещен в элемент управления оболочки, как и любой старый элемент управления:

<wsba:CalendarBase ID="CalendarControl" runat="server" />

Я создал элемент управления LinkButton, чтобы выбрать «Следующий месяц», и его соответствующийЩелкните обработчик события, например, так:

    protected void NextMonthLink_Click(object sender, EventArgs e)
    {
        CalendarControl.SelectedDateTime = CalendarControl.SelectedDateTime.AddMonths(1);            
    }

Это основа самого элемента управления календаря:

    public partial class CalendarBase : System.Web.UI.UserControl
{
    public DateTime SelectedDateTime { get; set; }
    public List<Item> SelectedCalendars { get; set; }

    public CalendarBase()
    {
        // default SelectedDateTime to Now if no value was set
        if (SelectedDateTime.Year.Equals(1)) { SelectedDateTime = DateTime.Now; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        // grab the month and year from the selectedDateTime
        int selectedMonth = SelectedDateTime.Month;
        int selectedYear = SelectedDateTime.Year;
        ... Do the rest of the stuff to render my control ...
    }

1 Ответ

0 голосов
/ 04 февраля 2011

Я, вероятно, что-то здесь упускаю, но если ваш пользовательский элемент управления Calendar использует Public Properties, чтобы изменить свой вывод.Вы должны отобразить элемент управления в событии ПОСЛЕ события Page_Load.Это гарантирует, что рендеринг происходит после любой установки его свойств.

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

Страница жизненного цикла страницы MSDN

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