2009-03-03 90 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) 

第二个下拉:

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有关,服务器不知道该列表已更新。

任何人都可以澄清这一点对我来说多一点?

回答

8

在读取的行上设置一个断点:NewFaqDropDownCategory.DataBind(),并在您的事件处理函数(NewFaqDropDownCategory_SelectedIndexChanged)中设置一个断点。 我怀疑在您的NewFaqDropDownCategory_SelectedIndexChanged事件触发之前正在调用数据绑定,导致您选择的值发生更改。

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

+0

啊哈!你是完全正确的。我把休息放在那里,发现事情在事件发生之前确实被调用了。我将DataBind封装在if.page.ispostback条件中,并且解决了它!谢谢! – Anders 2009-03-03 20:31:36

0

我认为这是一个错误在你的LINQ查询第二个下拉框

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

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

2

我有同样的问题。发现我忘了看是否回发到网页,我在页面的Page_Load事件中绑定了我的DropDownList控件。 我忘了用:

if (!IsPostBack) 
{ 
    .... do databind .... 
} 
相关问题