2009-03-03 33 views
5

Có vẻ như câu hỏi này là was addressed here, nhưng giải pháp của anh ấy không hiệu quả đối với tôi. Tôi đang tạo một hệ thống menu thả xuống động để điền vào danh sách thả xuống thứ cấp với kết quả của truy vấn dựa trên mục đã chọn trong menu thả xuống đầu tiên.Giá trị DropDownList SelectedIndex không cập nhật trên AutoPostback

thả xuống đầu tiên bị dân cư:

Dim db As New linqclassesDataContext 
Dim categories = (From c In db.faq_cats) 

NewFaqDropDownCategory.DataSource = categories 
NewFaqDropDownCategory.DataTextField = "category" 
NewFaqDropDownCategory.DataValueField = "category_id" 
NewFaqDropDownCategory.DataBind() 
Unset(categories) 
Unset(db) 

thả xuống thứ hai bị dân cư:

Protected Sub NewFaqDropDownCategory_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) 
    Dim temp As Integer = CInt(Val(NewFaqDropDownCategory.SelectedIndex)) 
    MsgBox(theDrop.SelectedValue) 
    Return 

    'Dim db As New linqclassesDataContext 
    'Dim faqs = (From f In db.faqs Where f.category = NewFaqDropDownCategory.SelectedValue) 

    'NewFaqDropDownList.DataSource = faqs 
    'NewFaqDropDownList.DataTextField = "question" 
    'NewFaqDropDownList.DataValueField = "id" 
    'NewFaqDropDownList.DataBind() 
    'NewFaqLabel.Visible = True 
    'NewFaqDropDownList.Visible = True 
    'Unset(faqs) 
    'Unset(db) 
End Sub 

Các đánh dấu cho các danh sách đầu tiên ...

<asp:DropDownList ID="NewFaqDropDownCategory" AutoPostBack="true" runat="server" OnSelectedIndexChanged="NewFaqDropDownCategory_SelectedIndexChanged"> 
</asp:DropDownList> 

Và thứ hai ...

<asp:DropDownList ID="NewFaqDropDownList" runat="server" Visible="false"> 
</asp:DropDownList> 

Không có vấn đề gì tôi đã thử, tôi luôn nhận được "1" (giá trị của mục đầu tiên trong menu thả xuống thứ hai). Các bài tôi tham chiếu trước đó nói rằng điều này đã làm với AutoPostBack và máy chủ không biết danh sách đã được cập nhật chưa.

Có ai có thể làm rõ điều này cho tôi thêm một chút không?

Trả lời

8

Đặt điểm ngắt trên dòng ghi: NewFaqDropDownCategory.DataBind() và một trong trình xử lý sự kiện của bạn (NewFaqDropDownCategory_SelectedIndexChanged). Tôi nghi ngờ dữ liệu đang được gọi ngay trước khi sự kiện NewFaqDropDownCategory_SelectedIndexChanged kích hoạt gây ra giá trị đã chọn của bạn thay đổi.

Nếu có, bạn cần đảm bảo rằng bạn chỉ databind nếu bạn không ở giữa autopostback hoặc thay vì sử dụng NewFaqDropDownCategory.SelectedIndex trên dòng đầu tiên của trình xử lý sự kiện, bạn có thể truyền tham số người gửi đến DropDownList và sử dụng giá trị đã chọn của nó.

+0

ah hah! bạn hoàn toàn đúng. Tôi đặt sự đột nhập vào đó, phát hiện ra nó đã thực sự được gọi ngay trước khi sự kiện bị sa thải. Tôi bọc DataBind trong một điều kiện không page.ispostback nếu không, và sửa nó lên! cảm ơn! – Anders

+2

Yay, SO trinh của tôi bị mất với câu trả lời được chấp nhận đầu tiên của tôi :) – grenade

0

Tôi nghĩ rằng có một lỗi trong truy vấn LINQ của bạn cho sự sụt giảm thứ hai hộp

Dim faqs = (From f In db.faqs Where f.category = NewFaqDropDownCategory.SelectedValue) 

Ở đây bạn đang so sánh SelectedValue để loại xuống. Tuy nhiên, trong combobox đầu tiên bạn nói rằng DataValueField nên là category_id. Hãy thử thay đổi f.category thành f.category_id

2

Tôi đã gặp vấn đề tương tự. Tìm thấy tôi quên để xem nếu tôi đã được gửi lại cho trang hay không và tôi đã ràng buộc kiểm soát DropDownList của tôi trong sự kiện Page_Load của trang. Tôi đã quên sử dụng:

if (!IsPostBack) 
{ 
    .... do databind .... 
} 
Các vấn đề liên quan