2009-03-03 64 views
5

この質問のように見えますが、was addressed hereですが、彼のソリューションは私のためには機能しませんでした。私は最初のドロップダウンで選択された項目に基づいてクエリの結果をセカンダリドロップダウンリストに移入する動的なドロップダウンメニューシステムを作成しています。DropDownList SelectedIndexの値がAutoPostbackで更新されない

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) 

2番目のドロップダウンが移入取得:人口なっ

最初のドロップダウン

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 

最初のドロップダウンのためのマークアップ...

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

秒を...

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

何を試しても、常に「1」(2番目のドロップダウンの最初の項目の値)が表示されます。私が以前に参照した記事は、これがAutoPostBackと関係があり、リストがまだ更新されていないことをサーバが知らないと述べています。

もう少し私にこれを明確にすることはできますか?

答えて

8

NewFaqDropDownCategory.DataBind()とイベントハンドラ(NewFaqDropDownCategory_SelectedIndexChanged)の1行にブレークポイントを設定してください。 NewFaqDropDownCategory_SelectedIndexChangedイベントが発生して選択した値が変更される直前に、データバインドが呼び出されている可能性があります。

もしそうなら、自動ポストバックの途中でない場合、またはイベントハンドラの最初の行でNewFaqDropDownCategory.SelectedIndexを使用するのではなく、データバインドだけを確認する必要があります。ドロップダウンリストを開き、選択した値を使用します。

+0

ああああ!あなたは絶対に正しかった。私はそこに休憩を入れ、事件が起こる前に実際に呼ばれていたことを知った。私はpage.ispostback if条件式でDataBindをラップし、それを修正しました!ありがとう! – Anders

+2

さて、私のSOの処女は私の最初に受け入れられた答えで失われています:) – grenade

0

私はあなたがカテゴリーにSelectedValueのを比較しているボックス

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

2番目のドロップダウンのためのあなたのLINQクエリにバグがあると思います。しかし、最初のコンボボックスでは、DataValueFieldはcategory_idにする必要があります。 f.categoryをf.category_idに変更してみてください

2

私は同じ問題を抱えていました。見つかった私はページに戻ってポストしているかどうかを見て忘れて、私はページのPage_Loadイベントで私のDropDownListコントロールをバインドしていた。 私は忘れてしまった:

if (!IsPostBack) 
{ 
    .... do databind .... 
} 
関連する問題