DropDownList SelectedIndex值未在AutoPostback上更新

时间:2009-03-03 20:02:44

标签: asp.net vb.net linq autopostback

看起来这个问题was addressed here,但他的解决方案对我不起作用。我正在创建一个动态下拉菜单系统,该系统根据第一个下拉列表中所选项目的查询结果填充辅助下拉列表。

第一个下拉列表已填充:

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)

第二个下拉列表已填充:

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”(第二个下拉列表中第一个项目的值)。我前面提到的帖子说这与AutoPostBack有关,服务器不知道列表是否已更新。

任何人都可以为我澄清这一点吗?

3 个答案:

答案 0 :(得分:8)

在行上设置一个断点:NewFaqDropDownCategory.DataBind()和事件处理程序中的一个(NewFaqDropDownCategory_SelectedIndexChanged)。 我怀疑在NewFaqDropDownCategory_SelectedIndexChanged事件触发之前正在调用数据绑定,导致所选值发生变化。

如果是这样,你需要确保你只是数据绑定,如果你不在autopostback的中间,或者在事件处理程序的第一行使用NewFaqDropDownCategory.SelectedIndex,你可以将sender参数强制转换为DropDownList并使用其选定的值。

答案 1 :(得分:2)

我遇到了同样的问题。发现我忘了查看我是否回帖到页面,并且我在页面的Page_Load事件中绑定了我的DropDownList控件。 我忘记了使用:

if (!IsPostBack)
{
   .... do databind ....
}

答案 2 :(得分:0)

我认为您的LINQ查询中存在第二个下拉框

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

在这里,您将SelectedValue与类别进行比较。然而在第一个组合框中,你说DataValueField应该是category_id。尝试将f.category更改为f.category_id