Tôi có một ListBox mà tôi đang thêm ListItems vào một codebehind. Vấn đề tôi gặp phải là ListBox không nhìn thấy các mục đã chọn. Tôi có ListBox được dân cư động tùy thuộc vào những gì người dùng lựa chọn từ một DropDownList, do đó, DropDownList có AutoPostBack thiết lập là true. Tôi nghĩ rằng điều này là bằng cách nào đó gây ra vấn đề.ListBox không nhận được các mục đã chọn
Phương thức SelectedIndexChanged
của tôi, được sử dụng bất cứ khi nào một mục trong DropDownList được chọn, gọi một phương thức có tên là PopulateListBox
. Đây là những gì các phương pháp đó trông giống như:
protected void SelectedIndexChanged(object sender, EventArgs e)
{
string typeStr = type.SelectedItem.Text;
MyType = Api.GetType(typeStr);
PopulateListBox();
}
private void PopulateListBox()
{
listbox.Items.Clear();
foreach (PropertyInfo info in MyType.GetProperties())
listbox.Items.Add(new ListItem(info.Name));
}
Đối với những gì nó có giá trị, đây là DropDownList và ListBox:
<asp:DropDownList runat="server" ID="type" width="281px" OnSelectedIndexChanged="SelectedIndexChanged" AutoPostBack="true" />
<asp:ListBox runat="server" ID="listbox" width="281px" height="200px" selectionmode="Multiple" />
Những gì tôi đang cố gắng làm là thêm một danh sách các chuỗi (strings là chọn các mục) dưới dạng biến phiên khi nhấp vào nút gửi. Nút chuyển hướng đến một trang mới sau khi Danh sách đã được thêm vào phiên. Đi qua trong trình gỡ lỗi, Danh sách các chuỗi trống ở điểm mà tôi thêm nó vào phiên.
listbox.GetSelectedIndices()
không trả lại gì.
Cập nhật
tôi có thể truy cập vào các mục đã chọn nếu tôi không thực hiện thay đổi trong DropDownList. ListBox ban đầu được điền trên tải trang và nếu tôi thực hiện lựa chọn, chúng sẽ được nhận dạng. Nếu tôi chọn một cái gì đó từ DropDownList và ListBox được repopulated, các lựa chọn không được công nhận.
Phương thức Page_Load
của tôi chỉ có hai thứ. Nó khởi tạo biến Api của tôi và gọi PopulateDropDown
, trông như thế này:
private void PopulateDropDown()
{
foreach (Type t in Api.GetAllTypes())
type.Items.Add(new ListItem(t.Name));
string typeStr = type.Items[0].Text;
Type = Api.GetType(typeStr);
PopulateListBox();
}
Nhưng khi nào bạn không thể thấy các mục đã chọn trong hộp danh sách? Khi thay đổi lựa chọn trong danh sách thả xuống? Hoặc bạn có một số kiểm soát khác thực hiện postback? – dzendras
@dzendras: Tôi đã cập nhật bài đăng ở dưới cùng về vấn đề này. –
Khi nào bạn truy cập hộp danh sách? PageLoad? Kiểm tra xem nơi mà bạn truy cập nó là ok theo vòng đời trang ASP.NET (Trên các giai đoạn đầu của điều khiển yêu cầu xử lý không có thuộc tính của họ thiết lập). Ngoài ra, hãy kiểm tra xem bạn có không xóa hộp danh sách trước đó trong vòng đời của trang hay không. – dzendras