以下是我在审核某些代码时遇到的错误的复制品。
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,那么在回发后不会引发异常。
答案 0 :(得分:0)
这会给你带来同样的错误吗?
protected void Page_Load(object sender, EventArgs e)
{
if(!IsPostBack)
ddlMain.SelectedIndex = 0;
}
在回发时,它会加载视图状态值,并告诉下拉列表它没有任何值。然后你给它一个选定的索引0,它不存在。