2016-07-07 50 views
2

我有一個ASP.NET(VB)下拉列表,其中列出了用戶要在表單上選擇的國家/地區。DropDownList Items.FindByText正在插入:"已選中= "正確

代碼前面:

<asp:DropDownList ID="DropDownListCountry" runat="server" CssClass="form-control" 
    DataSourceID="SqlDataSourcecountryList" DataTextField="country_name_long" DataValueField="country_name_short"> 
</asp:DropDownList> 

僅供參考,既country_name_longcountry_name_short包含在數據庫中的相同的值/文本。

在後面,我選擇「英國」作爲默認選項的代碼:

DropDownListCountry.DataBind() 
DropDownListCountry.Items.FindByText("United Kingdom").Selected = True 

我用這個也試過,但它產生相同的結果:

DropDownListCountry.DataBind() 
DropDownListCountry.SelectedIndex = DropDownListCountry.Items.IndexOf(DropDownListCountry.Items.FindByText("United Kingdom")) 

此代碼似乎插入了一些非常錯誤的東西,當我然後查看最終結果HTML的源:

<option value="Ukraine">Ukraine</option> 
<option value="United Arab Erimates">United Arab Emirates</option> 
<option selected="selected" value="United Kingdom&quot; Selected=&quot;True">United Kingdom</option> 
<option value="United States of America">United States of America</option> 
<option value="Uraguay">Uruguay</option> 

您會從英國的行中看到,一些HTML似乎是在運行中生成的。

預期結果:

<option selected="selected" value="United Kingdom">United Kingdom</option> 

實際結果:

<option selected="selected" value="United Kingdom&quot; Selected=&quot;True">United Kingdom</option> 

什麼是錯/破/故障嗎?

+1

兩個問題,更像是一個理智檢查。 1.如果您不將任何項目標記爲已選項,會發生什麼情況? 2.如果您將其他國家標記爲選中,是否會發生同樣的情況? – Andrei

+0

Ahhh FFS。夥伴,你釘了它。果然,沒有一個國家受到這個問題的影響。你會相信英國的DB行實際上包含了腐敗的HTML!謝謝,我的朋友! – Rich

+0

所以很尷尬:(對我來說關閉/忽略這個stackoverflow問題的正確方法是什麼? – Rich

回答

1

不是.SelectedIndex嘗試:

DropDownListCountry.SelectedValue = DropDownListCountry.Items(
DropDownListCountry.Items.FindByText("United Kingdom")) 
+0

恐怕會拋出一個錯誤:'System.Web.UI.WebControls.ListItem'類型的值不能被轉換爲'Integer ' – Rich

+0

@Rich你確定你刪除了對'.IndexOf'的呼叫嗎? –

+0

是的,先生,完全 - 我註釋掉了我的線路,並複製並粘貼了你的線路 - http://pasteboard.co/8EfgMs7D0.png – Rich