Asp.net DropDownList SelectedIndex值在自动回发时未更新
看起来像是这个问题,但他的解决方案对我不起作用。我正在创建一个动态下拉菜单系统,它使用基于第一个下拉列表中所选项目的查询结果填充第二个下拉列表 第一个下拉列表正在填充:Asp.net DropDownList SelectedIndex值在自动回发时未更新,asp.net,vb.net,linq,autopostback,Asp.net,Vb.net,Linq,Autopostback,看起来像是这个问题,但他的解决方案对我不起作用。我正在创建一个动态下拉菜单系统,它使用基于第一个下拉列表中所选项目的查询结果填充第二个下拉列表 第一个下拉列表正在填充: Dim db As New linqclassesDataContext Dim categories = (From c In db.faq_cats) NewFaqDropDownCategory.DataSource = categories NewFaqDropDownCategory.DataTextField =
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
第二个下拉列表正在填充:
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有关,服务器还不知道列表已经更新
有人能再给我澄清一下吗?我想在第二个下拉框的LINQ查询中有一个bug
Dim faqs = (From f In db.faqs Where f.category = NewFaqDropDownCategory.SelectedValue)
在这里,您可以将SelectedValue与类别进行比较。但是在第一个组合框中,您说DataValueField应该是category_id。尝试将f.category更改为f.category_id在一行上设置一个断点,该行的内容为:NewFaqDropDownCategory.DataBind(),并在事件处理程序中设置一个断点(NewFaqDropDownCategory_SelectedIndexChanged)。 我怀疑数据绑定是在您的NewFaqDropDownCategory\u SelectedIndexChanged事件触发之前调用的,该事件会导致您选择的值发生更改
如果是这样的话,你需要确保你只有DATABOND,如果你不在自动翻转的中间,或者不是在事件处理程序的第一行上使用NeaFaqDoopDeCopy.SeldDead,你可以把发送器参数投到一个DROPPDIST列表中,并使用它的选择值。
< P>我也有同样的问题。发现我忘了查看是否发回页面,并且在页面的page\u Load
事件中绑定了DropDownList控件。
我忘了使用:
if (!IsPostBack)
{
.... do databind ....
}
啊哈!你完全正确。我把中断放在那里,发现它确实是在事件发生之前被调用的。我将数据绑定包装在if not page.ispostback条件中,这就解决了它!谢谢耶,我的童贞已经失去,我的第一个被接受的答案是:)十年后仍然有用!我有嵌套的动态控件,其中DataBind被调用了两次(一次在填充了用户控件的占位符上,一次在用户控件内的占位符上)。我感到困惑,因为回发事件会触发除初始值之外的所有内容,甚至在HTML呈现中,在我注释掉第一个更高级别的数据绑定并将较低级别的数据绑定包装在IsPostBack检查中后,也会显示正确的选定值。