1

下面是我在查看一些代码时遇到的错误的重现。

页面:

<asp:DropDownList ID="ddlMain" runat="server" Visible="False" />
<asp:Button ID="btnSelect" runat="server" Text="Select" />

文件后面的代码:

protected void Page_Load(object sender, EventArgs e)
{                
            ddlMain.SelectedIndex = 0;
}

请注意, ddlMain 具有visible=False. 如果我指定 selectedIndex = 0,则在页面加载时;selectedIndex 值不会改变并保持 -1。

该按钮用于启用回发;在回发时,上述语句失败并引发以下异常:

'ddlMain' 有一个无效的 SelectedIndex,因为它不存在于项目列表中。参数名称:值

为什么第一次没有引发异常?为什么它在回发后被提升?

我注意到即使下拉菜单的渲染大小为 0;在视图状态中仍然分配了 12 个字节 - 尽管我无法验证为控件存储的确切内容。如果我禁用视图状态,则回发后不会引发异常。

4

1 回答 1

0

这会给你同样的错误吗?

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostBack)
        ddlMain.SelectedIndex = 0;
}

在回发时,它会加载视图状态值,并告诉下拉列表它没有任何值。然后你给它一个选定的索引 0,它不存在。

于 2012-10-26T09:52:03.230 回答