2011-04-01 35 views
1

我對以下問題感到憤怒:在我的ASP.NET頁面(目標:.NET 4.0)中,我有以下聲明DropDownListSelectetValue不會返回ASP.NET中的選定值DropDownList

<asp:DropDownList ID="cmbRequestState" runat="server" EnableViewState="true"> 
    <asp:ListItem Text="Pending" Value="0"></asp:ListItem> 
    <asp:ListItem Text="Open" Value="1"></asp:ListItem> 
    <asp:ListItem Text="Closed" Value="2"></asp:ListItem> 
</asp:DropDownList> 

Page_Load事件代碼隱藏我設置cmbRequestState值設置爲「2」,例如 - 一切都很好,在瀏覽器在組合框中顯示的值是「關閉」,如HTML各自<option>標籤具有selected="selected"屬性。

然後我選擇「打開」並使用我的頁面上的「保存」按鈕執行回發。當我在按鈕的代碼中檢索SelectedValuecmbRequestState時,即使選擇了「1」,它仍然是「2」。

現在我不會經常編寫ASP.NET應用程序,但我確實在HTML和PHP編程方面有一些知識,並且從我的WinForms和WPF背景中,我期望SelectedValue包含當前選定的值。此外,我不想每次用戶從列表中選擇一個值時執行回發。

我在這裏錯過了什麼?我如何確保在打開頁面時,當前的請求狀態被選中,並且如果用戶進行更改,仍然會得到新的選擇?

+1

你可以添加你的代碼隱藏(至少是Page_Load的相關部分)嗎?聽起來就像你沒有在Page_Load方法中檢查請求是否是回發。你在檢查'IsPostback'嗎? – 2011-04-01 10:29:21

+0

不,我沒有檢查......正如我下面所說:* FACEPALM *,並且也感謝你的答案。 – 2011-04-01 10:36:51

+0

哈哈,起初並不瞭解FACEPALM,認爲這是一個很酷的縮寫,我沒有聽說過:-) – 2011-04-01 10:47:44

回答

2

根據page lifecycle,您在Page_Load事件中分配的選定值會覆蓋您在按鈕的OnClick事件中設置的值。將值分配給控件時,應該嘗試匹配頁面生命週期。

+0

1)* FACEPALM * - 謝謝! 2)重複1) – 2011-04-01 10:35:07

3

在Page_Load中,檢查它是否是回發請求。如果是,請不要初始化您的組合框。

if (!IsPostback) { 
    cmbRequestState.SelectedValue = "2"; 
} 
相關問題