选择dropdownlist项抛出异常(堆栈为空)

时间:2015-11-24 05:59:06

标签: c# asp.net

我遇到了选中Dropdownlist项目的问题。

首先,我将项目添加到Dropdownlist然后选择项目,但它总是抛出异常(堆栈为空)。

异常表示堆栈为空,但我在dropdownlist添加了新项目。

为什么我不能选择?在调试中,我看到它在dropdownlist

中有90个项目

我的代码:

   protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            dateDataBind();
            GetMemDetail();
        }
    }
    private void GetMemDetail()
    {
        var result = (from c in db.Customers
                      where c.CustomerID == thisCustomerID
                      select c).FirstOrDefault();

        //result.Birthday is '1990/5/10'
        //ddl_y item can't be selected, but ddl_m and ddl_d can
        ddl_y.Items.FindByValue(result.Birthday.Value.Year.ToString()).Selected = true;
        ddl_m.Items.FindByValue(result.Birthday.Value.Month.ToString()).Selected = true;
        ddl_d.Items.FindByValue(result.Birthday.Value.Day.ToString()).Selected = true;

    }
    private void dateDataBind()
    {
        for (int i = 1920; i < DateTime.Now.Year - 5; i++)
        {
            tempStr = i.ToString();
            ddl_y.Items.Add(new ListItem(tempStr + "Y", tempStr));
        }
        for (int i = 1; i < 13; i++)
        {
            tempStr = i.ToString();
            ddl_m.Items.Add(new ListItem(tempStr + "M", tempStr));
        }
        dateDayBind();
    }
    protected void dateDayBind()
    {
        ddl_d.Items.Clear();
        int mcount = DateTime.DaysInMonth(Convert.ToInt32(ddl_y.SelectedValue), Convert.ToInt32(ddl_m.SelectedValue));
        for (int i = 1; i < mcount + 1; i++)
        {
            tempStr = i.ToString();
            ddl_d.Items.Add(new ListItem(tempStr, tempStr));
        }
    }

预测投掷: System.InvalidOperationException:堆栈为空。 Stack empty

2 个答案:

答案 0 :(得分:4)

“Stack Empty”错误是由我认为的Visual Studio设计时功能引起的。可能不相关。

错误消息说明了一切。下拉菜单已经选择了一个不同的项目(除了1990),你也试图选择1990。

在选择新项目之前尝试清除选择。您可能还想为其他下拉菜单执行此操作:

ddl_y.ClearSelection();
ddl_y.Items.FindByValue(result.Birthday.Value.Year.ToString()).).Selected = true;

答案 1 :(得分:1)

根据执行流程,当调用dateDayBind()方法时,年份和月份中没有选定的值下拉,因此我们应该仅在选择年份和月份时尝试填充日期部分。 GetMemDetail()应如下所示:

private void GetMemDetail()
{
    var result = (from c in db.Customers
                  where c.CustomerID == thisCustomerID
                  select c).FirstOrDefault();

    //result.Birthday is '1990/5/10'
    //ddl_y item can't be selected, but ddl_m and ddl_d can
    ddl_y.Items.FindByValue(result.Birthday.Value.Year.ToString()).Selected = true;
    ddl_m.Items.FindByValue(result.Birthday.Value.Month.ToString()).Selected = true;
    dateDayBind();
    ddl_d.Items.FindByValue(result.Birthday.Value.Day.ToString()).Selected = true;

}

不要忘记在dateDataBind()方法中删除对dateDayBind()方法的调用。

希望这能解决您的问题。