ASP.NET回发后如何提供下拉列表项?

时间:2011-07-22 23:33:15

标签: asp.net

我对回发后的下拉列表中的可用项目有疑问。

我创建了一个从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"));
    }
}

现在,当没有回发时,将添加此项目。我添加了按钮控件,没有附加事件。

现在,当我反复点击我的按钮时,每次回发后都会看到第四个条目。

我的疑问与保存的信息在哪里有关,下拉列表中有第四项,当该项仅在第一次请求时添加并且在重复回发后仍然可用?

3 个答案:

答案 0 :(得分:2)

控件具有ControlState - 类似于ViewState - 在回发期间保留信息。

ControlState vs. ViewState

答案 1 :(得分:2)

在首页加载时,下拉列表将填充所有四个值,并存储在视图状态中。当您回发页面时,再次初始化dropdownlist并从视图状态加载值。由于服务器端加载事件未对下拉列表值进行任何更改,因此值仍保留为viewstate中的四个条目。

如果为下拉列表禁用viewstate,则会在回发时看到只有3个条目可用,具体取决于是否在每个页面加载时运行初始化代码。

答案 2 :(得分:1)

添加新列表项时 - 它会添加到下拉列表中并保存在viewstate中。