2011-04-02 70 views
0

這是我的第一個網頁,我似乎無法找到從下拉列表中選擇索引的正確方法。我不需要選定的索引,直到用戶按下提交按鈕。我一直在測試我在這個主題上發現的一切,但沒有任何工作。從提交的下拉列表中獲取selectedIndex提交

我不想在選擇時重置下拉框,如果我使用postback = true或任何選定的索引更改事件,會發生什麼情況。而且,我仍然得到索引0.

當我測試時,選定的索引總是零。

這將運行在頁面加載:

ddlBudgetLineItem.DataSource = budget.BudgetLineItems; 
ddlBudgetLineItem.DataTextField = "Name"; 
ddlBudgetLineItem.DataValueField = "BudgetLineItemID"; 
ddlBudgetLineItem.DataBind(); 

這是下拉列表:

<asp:DropDownList ID="ddlBudgetLineItem" runat="server"> 
      </asp:DropDownList> 

下面是需要指數代碼:

protected void submitPayment() 
    {    
     string amountValue = txtAmount.Text.ToString(); 

     float amount = float.Parse(amountValue); 

     Payment payment = new Payment() 
     { 
      Amount = amount, 
      Payee = txtPayee.Text, 
      BudgetLineItem = budget.BudgetLineItems[ddlBudgetLineItem.SelectedIndex], 
      Memo = txtMemo.Text, 
      PaymentDate = DateTime.Parse(txtPaymentDate.Text), 
      ExtraUserInfo = info 
     }; 

     provider.AddPayment(payment); 
    } 

任何援助非常感謝。

+0

對不起,該下拉列表的代碼已被省略: – determined 2011-04-02 13:43:15

+0

而且,我似乎無法做到這一點。這裏是下拉菜單 determined 2011-04-02 13:43:58

回答

1

它似乎是一個生命週期問題,這是因爲每次(在回發或不回收)頁面被加載,你的下拉列表被重建(由ddlBudgetLineItem.DataBind()引起),結論是在回發你的ddl將永遠獲得index = 0。

你怎麼能解決這個問題:

1:覆蓋的頁面數據綁定方法和呼叫base.databind之前把你的代碼(); (在方法中)

2:在您的加載事件中,您只需調用數據綁定(如果不是回發),它會阻止在每次加載頁面時重建對象狀態(導致丟失信息)。

3:看看頁面生命週期,它會幫助你防止這樣的未來問題。

+0

我根據您的建議更新了我的代碼,並且其工作方式類似於一個魅力:if(!IsPostBack) { ddlBudgetLineItem .DataBind(); } – determined 2011-04-02 14:15:30

+0

這些評論框如何工作對我來說是另一個謎,但我想說聲謝謝,並且我將研究頁面生命週期以防止將來出現問題。 – determined 2011-04-02 14:16:40