2012-10-26 46 views
1

下面是我在查看一些代碼時遇到的一個錯誤的重現。這是一個asp中的錯誤:DropDownList行爲

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,在視圖狀態下仍然有12個字節被分配 - 儘管我無法確認控件存儲的是什麼。如果我禁用viewstate然後回發後異常不會引發。

+0

向我們展示Button Click的代碼。 – freebird

+0

在按鈕點擊中沒有任何反應 – NoviceProgrammer

+1

我知道'.SelectedValue'的賦值只會在後處理中引起異常([MSDN上的詳細信息](http://msdn.microsoft.com/zh-cn/library/) system.web.ui.webcontrols.listcontrol.selectedvalue.aspx),其中指出「所選值不在可用值列表中,並且視圖狀態或其他狀態已被加載(已執行回發)」),但是在那裏對於'.SelectedIndex'屬性沒有這樣的聲明。我唯一能想到的其他事情是關閉下拉視圖狀態,因此沒有項目可以選擇回退 – freefaller

回答

0

這是否會給你同樣的錯誤?

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

回發時,它加載視圖狀態值,它告訴下拉列表它沒有任何值。然後你給它一個0的選擇索引,它不存在。

+0

相同,它不會在回發中執行,因此不會有任何錯誤。我只是想知道爲什麼它不會在初始頁面加載失敗。 – NoviceProgrammer

+0

在初始加載時不會加載視圖狀態。請看這裏http://i.msdn.microsoft.com/dynimg/IC152667.gif – Razvan

+0

是的,我知道。渲染後,我在viewstate中看到12個字節。如果我禁用viewstate異常不會發生。爲什麼第一次不會發生,因爲索引0處沒有項目。正如我所提到的,即使在賦值之後,所選索引也會顯示爲-1。 – NoviceProgrammer