一、前端定义textbox控件
<asp:DropDownList ID="year" runat="server">
</asp:DropDownList>
年
<asp:DropDownList ID="month" runat="server" AutoPostBack="true" OnSelectedIndexChanged="month_SelectedIndexChanged">
</asp:DropDownList>
日:<asp:DropDownList ID="day" runat="server">
</asp:DropDownList>
(1)AutoPostBack
autopostback是在使用者点击月份下拉框之后立即对日期下拉框做出反应,使日期下拉框立马显示日期。
(2)OnSelectedIndexChanged
当用户在选择控件中选择不同的选项时,会触发OnSelectedIndexChanged事件。可以通过在控件上设置OnSelectedIndexChanged属性来指定要执行的服务器端代码。其绑定的是后端会编写的一个函数。
二、后端函数实现
(1)填充年份和月份
因为年份和月份不用区分闰年,所以可以直接对其下拉框进行填充。if (!IsPostBack)是为了在选择下拉框内容之后进行下一步操作时不让下拉框刷新。
if (!IsPostBack)
{
int y = DateTime.Now.Year;//取出今天的年份存入y
for (int i = y; i >= y - 30; i--)
{
year.Items.Add(i.ToString());//在year控件当中加入倒退30年的年份,用tostring转换为字符串
}
for (int j = 12; j >= 1; j--)
{
month.Items.Add(j.ToString());//复选框中加入month的十二个月
}
}
(2)闰年对应日期计算
protected void month_SelectedIndexChanged(object sender, EventArgs e)
{
int y = int.Parse(year.SelectedValue);//int输入的需要int转换
int m = int.Parse(month.SelectedValue);
int day0 = 31;//默认为大月天数
if (m == 4 || m == 6 || m == 9 || m == 11)
day0 = 30;//4、6、9、11月不会随年份变化而变化可以直接设置
if (m == 2)
{
if (m == 2 && (y % 400 == 0) || (y % 4 == 0 && y % 100 != 0))//闰年的判断,如果是闰年则2月的日期需要改为29天
day0 = 29;
else day0 = 28;//不是闰年则为28天
}
day.Items.Clear();//清空形成的复选框内的内容,避免造成出现2*20个年份或者2*12个月份的情况
for (int i = 1; i <= day0; i++)
day.Items.Add(i.ToString());//将经过是否闰年判断的日期填入日期的复选框
}
注意事项
编写后端时注意前端控件的控件ID是否正确