Tóm tắtASP.NET WebForms DropDownList dữ liệu ràng buộc hành vi lạ?
tôi tải thành phố từ bối cảnh dữ liệu vào hai danh sách khác nhau và ràng buộc họ phải điều khiển DropDownList tương ứng của họ.
Mặc dù mã giống nhau cho cả hai và chỉ có dữ liệu và rõ ràng tên của các điều khiển khác nhau, việc ràng buộc dữ liệu dường như không hoạt động đúng cho chỉ một trong số chúng. Thay vì hiển thị tên thành phố, nó hiển thị Id của nó, đó là, chỉ cho tùy chọn đầu tiên!
Mã-đằng sau
Chúng tôi có hai điều khiển DropDownList:
DestinationDropDownList
;OriginDropDownList
.
Sau đó, tôi điền chúng.
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" />
Datum hiển thị
*DestinationDropwDownList*
- 0000-0000-0000-0000-0000 (empty Guid)
- CityName 01
- CityName 02
- ...
*OriginDropDownList*
- - Select a city -
- CityName 01
- CityName 02
- ...
Màn hình chính xác được hiển thị bởi điều khiển OriginDropDownList
. Tại sao DestinationDropDownList
không hiển thị chính xác dữ liệu, tức là, cho mục đầu tiên và duy nhất trong danh sách của nó? Tôi không hiểu chút nào và mất một vài giờ đã cố gắng tìm ra giải pháp! = (
- tôi đã cố gắng loại bỏ các mục đầu tiên trước khi chèn các hướng dẫn;
- tôi đã cố gắng để chèn các hướng dẫn hai lần, sau đó loại bỏ một trong những đầu tiên;
- Tôi cố gắng để đi cùng với phương pháp
DropDownList.Items.Add(string)
, và này được hiển thị không có gì như đối với hàng đầu tiên, thay vào đó là các Guid trống.
Câu hỏi
- Đã từng gặp sự cố như vậy với kiểm soát DropDownList chưa?
- Cách sửa lỗi này !?
EDIT # 1
michielvoo 's câu trả lời giúp tôi tìm thấy một phương pháp mới để ràng buộc dữ liệu hướng dẫn. Thông qua mã của mình, giải pháp được tìm thấy là:
<asp:DropDownList ID="DestinationDropDownList" runat="server"
AppendDataBoundItems="true"
CssClass="required">
<asp:ListItem Value="- Select a city -" />
</asp:DropDownList>
xóa lệnh chèn chỉ trong mã cho chỉ DropDownList này. Bây giờ nó hiển thị chính xác những gì tôi muốn ngay từ đầu.
Tôi chấp nhận câu trả lời của mình vì đó là người đã dẫn tôi đến một giải pháp tốt. Tôi không cảm thấy nó là giải pháp thực sự, nhưng miễn là kết quả là của họ, tôi không quan tâm nhiều. Ngoài việc xác minh Guid.Empty
để xác thực trang, tôi sẽ phải kiểm tra chỉ dẫn của mình và vô hiệu hóa trang khi người dùng không chọn thành phố nằm ở một chỉ mục khác 0, kể từ khi tôi kiểm tra với Guid
sẽ thất bại.
EDIT # 2
Với mã-đằng sau tuyên bố trong câu trả lời michielvoo, nó hoàn toàn giải quyết được vấn đề tôi đã cho DropDownList
hiển thị ListItem.Value
tài sản thay vì ListITem.Text
tài sản duy nhất và chỉ dành cho mục đầu tiên trong danh sách. Tôi không biết có gì sai với những cách khác, nhưng cái này hoạt động rất tốt!
Cảm ơn michielvoo!
Cảm ơn tất cả vì sự hỗ trợ của các bạn! =)
Tôi không thể tái tạo vấn đề này ... – JonH
JonH: Tôi hơi vui khi bạn không thể, bởi vì nó là một nỗi đau khi nó xảy ra! ;) Cảm ơn vì hạt muối của bạn! =) –
Tôi không thể hiểu tại sao điều này lại xảy ra với bạn ... – JonH