2010-12-01 52 views
4

好吧,所以我有一個DropDownList控件包含50個ListItems,每50個狀態之一。文本值反映了每個文本值唯一的每個狀態名稱。但是,每個列表項的值屬性都包含該州的當前稅率,這意味着某些值不是唯一的。此控件上的回傳不斷更改所選項目。有沒有解決這個問題的方法?DropDownList與非唯一值是搞砸視圖狀態/回發

要複製,請將以下代碼複製到新的網絡表單中。它只是一個簡單的DropDownList。嘗試選擇不同的狀態。其中一些堅持,而另一些則不堅持。例如,嘗試選擇「愛達荷州」作爲國家;它由於某種原因返回阿肯色州。這發生在OnSelectedIndexChanged事件甚至發生之前,因爲如果我選擇「愛達荷州」,然後在回發的事件方法中讀取選定的項目,則選定的項目是阿肯色州!很煩人。

  State:<br /> 
      <asp:DropDownList BorderWidth="3px" AutoPostBack="true" BackColor="#ffffcc" ID="ddlBillingState" 
       runat="server"> 
       <asp:ListItem Value="0" Text="Not Specified"></asp:ListItem> 
       <asp:ListItem Value="4" Text="Alabama"></asp:ListItem> 
       <asp:ListItem Value="0" Text="Alaska"></asp:ListItem> 
       <asp:ListItem Value="5.6" Text="Arizona"></asp:ListItem> 
       <asp:ListItem Value="6" Text="Arkansas"></asp:ListItem> 
       <asp:ListItem Value="8.25" Text="California"></asp:ListItem> 
       <asp:ListItem Value="2.9" Text="Colorado"></asp:ListItem> 
       <asp:ListItem Value="6" Text="Connecticut"></asp:ListItem> 
       <asp:ListItem Value="6" Text="District of Columbia"></asp:ListItem> 
       <asp:ListItem Value="0" Text="Delaware"></asp:ListItem> 
       <asp:ListItem Value="6" Text="Florida"></asp:ListItem> 
       <asp:ListItem Value="4" Text="Georgia"></asp:ListItem> 
       <asp:ListItem Value="4" Text="Hawaii"></asp:ListItem> 
       <asp:ListItem Value="6" Text="Idaho"></asp:ListItem> 
       <asp:ListItem Value="6.25" Text="Illinois"></asp:ListItem> 
       <asp:ListItem Value="7" Text="Indiana"></asp:ListItem> 
       <asp:ListItem Value="6" Text="Iowa"></asp:ListItem> 
       <asp:ListItem Value="5.3" Text="Kansas"></asp:ListItem> 
       <asp:ListItem Value="6" Text="Kentucky"></asp:ListItem> 
       <asp:ListItem Value="4" Text="Louisiana"></asp:ListItem> 
       <asp:ListItem Value="5" Text="Maine"></asp:ListItem> 
       <asp:ListItem Value="6" Text="Maryland"></asp:ListItem> 
       <asp:ListItem Value="6.25" Text="Massachusetts"></asp:ListItem> 
       <asp:ListItem Value="6" Text="Michigan"></asp:ListItem> 
       <asp:ListItem Value="6.875" Text="Minnesota"></asp:ListItem> 
       <asp:ListItem Value="7" Text="Mississippi"></asp:ListItem> 
       <asp:ListItem Value="4.225" Text="Missouri"></asp:ListItem> 
       <asp:ListItem Value="0" Text="Montana"></asp:ListItem> 
       <asp:ListItem Value="5.5" Text="Nebraska"></asp:ListItem> 
       <asp:ListItem Value="6.85" Text="Nevada"></asp:ListItem> 
       <asp:ListItem Value="0" Text="New Hampshire"></asp:ListItem> 
       <asp:ListItem Value="7" Text="New Jersey"></asp:ListItem> 
       <asp:ListItem Value="5" Text="New Mexico"></asp:ListItem> 
       <asp:ListItem Value="4" Text="New York"></asp:ListItem> 
       <asp:ListItem Value="5.75" Text="North Carolina"></asp:ListItem> 
       <asp:ListItem Value="5" Text="North Dakota"></asp:ListItem> 
       <asp:ListItem Value="5.5" Text="Ohio"></asp:ListItem> 
       <asp:ListItem Value="4.5" Text="Oklahoma"></asp:ListItem> 
       <asp:ListItem Value="0" Text="Oregon"></asp:ListItem> 
       <asp:ListItem Value="6" Text="Pennsylvania"></asp:ListItem> 
       <asp:ListItem Value="7" Text="Rhode Island"></asp:ListItem> 
       <asp:ListItem Value="6" Text="South Carolina"></asp:ListItem> 
       <asp:ListItem Value="4" Text="South Dakota"></asp:ListItem> 
       <asp:ListItem Value="7" Text="Tennessee"></asp:ListItem> 
       <asp:ListItem Value="6.25" Text="Texas"></asp:ListItem> 
       <asp:ListItem Value="4.7" Text="Utah"></asp:ListItem> 
       <asp:ListItem Value="6" Text="Vermont"></asp:ListItem> 
       <asp:ListItem Value="5.0" Text="Virginia"></asp:ListItem> 
       <asp:ListItem Value="6.5" Text="Washington"></asp:ListItem> 
       <asp:ListItem Value="6" Text="West Virginia"></asp:ListItem> 
       <asp:ListItem Value="5" Text="Wisconsin"></asp:ListItem> 
       <asp:ListItem Value="4" Text="Wyoming"></asp:ListItem> 
      </asp:DropDownList> 

我甚至嘗試禁用ViewState中,然後OnSelectedIndexChanged我將存儲在ViewState中所選擇的指數[「的selectedIndex」]和檢索它的回傳和重新填充下拉列表。但正如我之前所說,因爲選定的項目是一個不同的價值觀之前,它甚至到達事件,它只是存儲螺旋值在我的自定義視圖狀態字段。

回答

5

我認爲您的值應該是唯一的。不要將稅率作爲價值,而應該讓價值變成狀態,然後使用該狀態來獲得稅收價值。舉個例子,在你的代碼隱藏中,你可以使用一個Dictionary<string, decimal> taxTable來獲取你的值。如

decimal taxRate = taxTable[yourDropDown.SelectedValue]; 
+0

謝謝,這就是我所害怕的。當它歸結爲一些不可能的東西時就會唾棄。我花了好幾個小時試圖找出視圖狀態被修改的地方,以便發現它與視圖狀態無關。大聲笑 – Chev 2010-12-01 18:34:13

+0

我實際上是要額外的英里,並建立稅務數據庫表。如果稅率發生變化,我應該首先做到輕鬆修改。這是當你偷工減料時發生的情況:P – Chev 2010-12-01 18:47:35

2

爲什麼你不能從州級縮寫中得到稅率?

在後面的代碼:

decimal taxRate = GetTaxRateFromState(ddlState.SelectedValue); 

我想象中的下拉不知道哪個值是最初選擇的一個,它只是選擇的值設置到具有被張貼價值的第一項。

1

Hi Chevex 不幸的是,沒有辦法爲ListItem使用非唯一值。您必須爲每個稅率生成一個唯一的ID,並將該ID用作價值而不是稅率

1

將「Value」看作ASP.NET用來識別從DropDownList中選擇哪個項目的主鍵。通過重新調整value屬性來存儲其他內容,所選項目(按其值存儲在ViewState中)不再是唯一的,並且不能保留。正如其他人所提到的,將您的稅率存儲在其他地方,並使用選定的狀態來確定稅率(DropDownList控件本身之外)。