予加載從數據上下文城市成兩個不同的列表,並將它們結合到它們各自的DropDownList控件。
儘管兩者的代碼都是相同的,只有數據和控件的名稱顯然不同,但數據綁定似乎無法正常工作,只有其中一個。它不顯示城市名稱,而是顯示其ID,即僅顯示第一個選項!
代碼隱藏
我們有兩個DropDownList控件:
DestinationDropDownList
;OriginDropDownList
。
然後,我填充它們。
public partial class MyControl : UserControl {
protected void Page_Load(object sender, EventArgs e) {
if (!IsPostBack) {
var instruction = new City() {
CityId = Guid.Empty,
CityName = "- Select a city -"
};
var destinations = context.Cities.ToList();
destinations = destinations.OrderBy(c => c.CityName).ToList();
destinations.Insert(0, instruction);
DestinationDropDownList.DataSource = destinations;
DestinationDropDownList.DataTextField = "CityName";
DestinationDropDownList.DataValueField = "CityId";
DestinationDropDownList.DataBind();
var origins = context.Cities.ToList();
origins = origins.OrderBy(c => c.CityName).ToList();
origins.Insert(0, instruction);
OriginDropDownList.DataSource = origins;
OriginDropDownList.DataTextField = "CityName";
OriginDropDownList.DataValueField = "CityId";
OriginDropDownList.DataBind();
}
}
private static readonly MyDataContext context = new MyDataContext();
}
HTML
<asp:DropDownList ID="DestinationDropDownList" runat="server" />
<asp:DropDownList ID="OriginDropDownList" runat="server" />
基準顯示
*DestinationDropwDownList*
- 0000-0000-0000-0000-0000 (empty Guid)
- CityName 01
- CityName 02
- ...
*OriginDropDownList*
- - Select a city -
- CityName 01
- CityName 02
- ...
正確的顯示是由OriginDropDownList
控件提供的顯示。爲什麼DestinationDropDownList
不能正確顯示數據,也就是說,它的列表中的第一個也是唯一的第一個項目!?我一點都不明白,幾個小時已經試圖找到解決方案! =(
- 我試圖插入指令之前移除所述第一項;
- 我試圖插入指令兩次,然後除去第一之一;
- 我試圖與
DropDownList.Items.Add(string)
方法走,和這是什麼都不顯示作爲第一行,而不是空的Guid。
問題
- 有沒有人遇到過這樣的DropDownList控件問題?
- 如何糾正這種行爲!?
編輯#1
michielvoo的回答幫我找到數據綁定指令的新方法。通過他的代碼,找到的解決方法是這樣的:
<asp:DropDownList ID="DestinationDropDownList" runat="server"
AppendDataBoundItems="true"
CssClass="required">
<asp:ListItem Value="- Select a city -" />
</asp:DropDownList>
從代碼中刪除指令插入僅用於此DropDownList。現在它從頭開始顯示我想要的。
我接受了他的答案,因爲是他讓我找到了一個很好的解決方法。我不認爲這是真正的解決方案,但只要結果是他們的,我不介意。除此之外,我不必驗證Guid.Empty
是否驗證頁面,我必須檢查我的指示,並且在用戶沒有選擇位於另一個索引的城市時,將頁面設置爲無效,因爲我的檢查是Guid
將失敗。
編輯#2
隨着代碼隱藏在michielvoo的回答說,它完全解決了我曾經爲DropDownList
問題顯示ListItem.Value
財產,而不是ListITem.Text
屬性僅供參考,只列表中的第一項。我不知道其他方面有什麼問題,但是這個方法非常棒!
謝謝michielvoo!
謝謝大家的支持! =)
我不能重現這個問題... – JonH
JonH:我有點高興你不能,因爲它發生時真的很痛! ;)謝謝你的一粒鹽! =) –
我只是不能理解爲什麼發生在你身上...... – JonH