6

この質問はここで対処されたようですが、彼の解決策は私にとってはうまくいきませんでした。最初のドロップダウンで選択した項目に基づいて、クエリの結果をセカンダリ ドロップダウンリストに入力する動的ドロップダウン メニュー システムを作成しています。

最初のドロップダウンが読み込まれます:

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>

そして2番目...

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

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

誰かが私のためにこれをもう少し明確にすることができますか?

4

3 に答える 3

9

次の行にブレーク ポイントを設定します。NewFaqDropDownCategory_SelectedIndexChanged イベントが発生して選択した値が変更される直前に、データバインドが呼び出されていると思われます。

その場合、自動ポストバックの途中ではない場合にのみデータバインドするか、イベントハンドラーの最初の行で NewFaqDropDownCategory.SelectedIndex を使用する代わりに、送信者パラメーターを DropDownList にキャストしてその選択した値。

于 2009-03-03T20:22:23.630 に答える
2

私も同じ問題を抱えていました。Page_Loadページに投稿しているかどうかを確認するのを忘れていて、ページのイベントでDropDownList コントロールをバインドしていたことがわかりました。私は使用するのを忘れていました:

if (!IsPostBack)
{
   .... do databind ....
}
于 2009-04-20T11:49:23.693 に答える
0

2 番目のドロップダウン ボックスの LINQ クエリにバグがあると思います

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

ここでは、SelectedValue をカテゴリと比較しています。しかし、最初のコンボボックスでは、DataValueField を category_id にする必要があると述べました。f.category を f.category_id に変更してみてください

于 2009-03-03T20:21:35.583 に答える