填写页面加载中的DropDown

时间:2013-05-22 12:13:31

标签: c# asp.net

我正在尝试通过一系列查询来填充我的下拉菜单,我会在页面加载时自动填写。每当我在下拉列表中选择一个值并按下一个按钮时,它会返回到第一个索引,所以我想知道是否有任何方法可以防止出现此问题:

protected void Page_Load(object sender, EventArgs e)
{
    Functions.username = "1"; // This is just to get rid of my login screen for testing puposes
    DropDownList1.Items.Clear();

    Functions.moduledatelister();
    for (int i = 0; i <= Functions.moduledatelist.Count-1; i++) {
    DropDownList1.Items.Add(Functions.moduledatelist.ElementAt(i));
    }

}

protected void Button2_Click(object sender, EventArgs e)
{
    Label1.Text = Functions.DATES.ElementAt(DropDownList1.SelectedIndex).ToString();
}

按下按钮后,索引将返回0,标签显示第一个项目的值。

4 个答案:

答案 0 :(得分:4)

是的,您可以使用IsPostBack property来阻止它。您应该仅在初始加载时对DropDownList进行数据绑定:

protected void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
        // DataBindDropDown();
    }
}

默认情况下,状态通过ViewState维护,因此无需在每次回发时重新加载所有项目。如果再次加载数据源,还可以防止触发事件。

答案 1 :(得分:1)

在Page_Load中

检查它是否是回发。要了解为什么需要IsPostBack并处理可能的类似问题,您需要对ASP.NET Page Life Cycle

有一个很好的理解
protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
        return;

    Functions.username = "1"; // This is just to get rid of my login screen for testing puposes
    DropDownList1.Items.Clear();

    Functions.moduledatelister();
    for (int i = 0; i <= Functions.moduledatelist.Count-1; i++) {
        DropDownList1.Items.Add(Functions.moduledatelist.ElementAt(i));
    }
}

答案 2 :(得分:1)

您必须处理页面类的IsPostBack属性:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
    Functions.username = "1"; // This is just to get rid of my login screen for testing puposes
    DropDownList1.Items.Clear();

    Functions.moduledatelister();
    for (int i = 0; i <= Functions.moduledatelist.Count-1; i++) {
    DropDownList1.Items.Add(Functions.moduledatelist.ElementAt(i));
    }
    }
}

答案 3 :(得分:1)

使用IsPostBack方法:

if(!IsPostBack)    
{    
  //enter your dropdownlist items add code here    
}