【发布时间】:2011-02-04 09:18:51
【问题描述】:
我创建了一个非常简单的日历用户控件,其中包含一个公共属性,用于定义要显示的月份/年份。我的日历控件放置在另一个 ascx 控件(本质上是包装器控件)中,其中包括用于一次向前和向后切换日历控件一个月的 LinkButton 控件。如果我在设计时在包装控件中明确定义日历控件的 SelectedDateTime 属性,则日历控件将显示正确的月份/年份。但是,当我尝试在运行时使用上一个和下一个 LinkButton 控件上的 Click 事件设置属性值时,日历控件永远不会选择我尝试分配给它的新 SelectedDateTime 值。
当我在调试模式下运行代码时,LinkButton 的 Click 事件总是最后发生 - 在日历控件的 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 ...
}
【问题讨论】:
标签: asp.net user-controls page-lifecycle event-handling