我正在尝试通过一系列查询来填充我的下拉菜单,我会在页面加载时自动填写。每当我在下拉列表中选择一个值并按下一个按钮时,它会返回到第一个索引,所以我想知道是否有任何方法可以防止出现此问题:
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,标签显示第一个项目的值。
答案 0 :(得分:4)
是的,您可以使用IsPostBack
property来阻止它。您应该仅在初始加载时对DropDownList
进行数据绑定:
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
// DataBindDropDown();
}
}
默认情况下,状态通过ViewState
维护,因此无需在每次回发时重新加载所有项目。如果再次加载数据源,还可以防止触发事件。
答案 1 :(得分:1)
检查它是否是回发。要了解为什么需要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
}