这是asp:DropDownList行为中的错误

时间:2012-10-26 09:44:56

标签: asp.net webforms

以下是我在审核某些代码时遇到的错误的复制品。

aspx页面:

<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;在viewstate中仍然分配了12个字节 - 尽管我无法验证控件的确切存储内容。如果我禁用了viewstate,那么在回发后不会引发异常。

1 个答案:

答案 0 :(得分:0)

这会给你带来同样的错误吗?

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

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