Я создал очень простой пользовательский элемент управления календарем, содержащий общедоступное свойство, которое используется для определения отображаемого месяца/года. Мой элемент управления календарем помещен внутри другого элемента управления ascx (по сути, элемента управления-оболочки), который включает элементы управления LinkButton, используемые для переключения элемента управления календарем вперед и назад на один месяц за раз. Если я явно определяю свойство SelectedDateTime элемента управления календарем в элементе управления-оболочке во время разработки, соответствующий месяц/год отображается элементом управления календарем. Однако, когда я пытаюсь установить значение свойства во время выполнения, используя событие Click для предыдущего и следующего элементов управления LinkButton, элемент управления календарем никогда не получает новое значение SelectedDateTime, которое я пытаюсь ему присвоить.
Когда я запускаю код в режиме отладки, событие Click LinkButton всегда происходит последним — после того, как значение свойства SelectedDateTime элемента управления календарем уже было установлено по умолчанию и отображено. Что мне не хватает?
Элемент управления календарем помещается в элемент управления-оболочку, как и любой старый элемент управления:
<wsba:CalendarBase ID="CalendarControl" runat="server" />
Я создал элемент управления LinkButton для выбора «Следующий месяц» и соответствующий ему обработчик событий Click, например:
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 ...
}