我对回发后的下拉列表中的可用项目有疑问。
我创建了一个从DropDownList派生的自定义Web服务器控件:
public class StateListControl : DropDownList
{
public StateListControl()
{
this.Items.Add(new ListItem("New York", "NY"));
this.Items.Add(new ListItem("Nebraska", "NE"));
this.Items.Add(new ListItem("Texas", "TX"));
}
}
我将控件添加到页面中,在Page_Load事件中执行了以下操作:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
StateListControl1.Items.Add(new ListItem("Michigan", "MI"));
}
}
现在,当没有回发时,将添加此项目。我添加了按钮控件,没有附加事件。
现在,当我反复点击我的按钮时,每次回发后都会看到第四个条目。
我的疑问与保存的信息在哪里有关,下拉列表中有第四项,当该项仅在第一次请求时添加并且在重复回发后仍然可用?
答案 0 :(得分:2)
控件具有ControlState - 类似于ViewState - 在回发期间保留信息。
答案 1 :(得分:2)
在首页加载时,下拉列表将填充所有四个值,并存储在视图状态中。当您回发页面时,再次初始化dropdownlist并从视图状态加载值。由于服务器端加载事件未对下拉列表值进行任何更改,因此值仍保留为viewstate中的四个条目。
如果为下拉列表禁用viewstate,则会在回发时看到只有3个条目可用,具体取决于是否在每个页面加载时运行初始化代码。
答案 2 :(得分:1)
添加新列表项时 - 它会添加到下拉列表中并保存在viewstate中。