下面是我在查看一些代码时遇到的错误的重现。
页面:
<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 个字节 - 尽管我无法验证为控件存储的确切内容。如果我禁用视图状态,则回发后不会引发异常。