在选择第一个下拉项目时更改第二个下拉项目

时间:2014-05-15 05:18:05

标签: asp.net drop-down-menu

我有两个下拉列表。

第一个下拉列表是月份列表,第二个下拉列表是几天。

我希望当我从第一次下拉菜单中选择月份时,第二次下拉菜单的项目会根据第一次下拉菜单的选择而变化。

例如 - 如果我从第一个下拉列表中选择1月,则第二个下拉列表变为1到31.在2月份的选择中,第二个下拉列表变为1到29。

我正在尝试使用此代码但无法正常工作 -

protected void Page_Load(object sender, EventArgs e)
    {
        getDays(dropdownMonth.SelectedValue);

    }

public void getDays(string selectedMonth)
    {
        int i = 0;
         dropdownDays.Items.Clear();
        switch (selectedMonth)
        {
            case "January":
                i = 31;
                break;
            case "February":
                i = 29;
                break;
            case "March":
                i = 31;
                break;
            case "April":
                i = 30;
                break;
            case "May":
                i = 31;
                break;
            case "June":
                i = 30;
                break;
            case "July":
                i = 31;
                break;
            case "August":
                i = 31;
                break;
            case "September":
                i = 30;
                break;
            case "October":
                i = 31;
                break;
            case "November":
                i = 30;
                break;
            case "December":
                i = 31;
                break;
        }

        for (int j = 1; j <= i; j++)
        {
            dropdownDays.Items.Add(j.ToString());
        }
        int Month = DateTime.ParseExact(Convert.ToString(dropdownMonth.SelectedValue), "MMMM", CultureInfo.CurrentCulture).Month;
        int day = Convert.ToInt32(dropdownDays.SelectedValue);
        int year = DateTime.Now.Year;
        DateTime date = new DateTime(year, Month, day);
        lblEndDateValue.Text = String.Format("{0:dd MMMM}", date.AddDays(-1));

如果我从我的代码中移除dropdownmonth.items.clear();,那么它可以正常工作,但之后会在此下拉列表中将新日期列表添加到上一个列表中。

2 个答案:

答案 0 :(得分:2)

对第一个下拉列表使用Selected index changed事件,并为第一个下拉列表设置autopostback = true

   protected void dropdownMonth_SelectedIndexChanged(object sender, EventArgs e)
   {
       getDays(dropdownMonth.SelectedValue);
   }

设置AutoPostBack =&#34; true&#34;对于dropdownDays,

  protected void dropdownDays_SelectedIndexChanged(object sender, EventArgs e)
    {
        LabelDays.Text = dropdownDays.SelectedValue;
    }

答案 1 :(得分:0)

试试这个..你必须在!ispostback内绑定你的代码。否则每个回发上的值都会被重置..

protected void Page_Load(object sender, EventArgs e)
{
  if(!IsPostback)
   {
       //getDays(dropdownMonth.SelectedValue);
   }
}

您可以在selectedidexchanged月份事件下拉列表中调用您的函数,并为下拉列表设置Autopostback=true。我不认为您必须在页面加载时调用它。

 protected void dropdownMonth_SelectedIndexChanged(object sender, EventArgs e)
   {
       getDays(dropdownMonth.SelectedValue);
   }