【问题标题】:asp.net drop down firing wrong eventasp.net 下拉触发错误事件
【发布时间】:2011-01-04 11:37:19
【问题描述】:

我正在使用 VS 2010、.net 4、vb.net。我有一个 asp.net 站点,并且在一个页面上有 2 个下拉列表。

  <asp:DropDownList ID="ddlClassIndex" runat="server" AutoPostBack="true" />
    <asp:DropDownList ID="ddlClassQBankList" runat="server" AutoPostBack="true" />

当页面第一次加载时,我可以点击其中任何一个,选择一个项目,事件就会正确触发。当我选择任一下拉框作为第二个操作时,第一个下拉框ddlClassIndex.SelectedIndexChanged 会触发。我做错了什么,这会发生。我在页面加载时进行page.ispostback=false 检查,我们也在使用母版页。

有什么想法吗?

当然..

 Private Sub LoadClass()
    Dim Os As List(Of Dempsey.OldeTestClassIndex) = Nothing
    Dim Oc As New Dempsey.OldeTestClassIndex_Controller
    Os = Oc._GetClassIndexData(0)

    Dim X = From w In Os
            Where w.Active = 3
            Select w

    Os = X.ToList

    With Me.ddlClassIndex
        .DataSource = Os.OrderBy(Function(o) o.ClassTitle)
        .DataTextField = "ClassTitle"
        .DataValueField = "tblClassIndexID"
        .DataBind()
        .Items.Insert(0, New ListItem("Choose Class Title", "0"))
        .SelectedIndex = 0
    End With


End Sub



Protected Sub ddlClassIndex_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlClassIndex.SelectedIndexChanged
    If Me.ddlClassIndex.SelectedIndex > 0 Then
        If ClassHasCategories(Me.ddlClassIndex) = True Then
            Response.Redirect("AddEditQBank.aspx?ClassIndexID=" & Me.ddlClassIndex.SelectedItem.Value)
        Else
            Me.lblStatus.Text = "No Categories"
            Me.lblStatus.Visible = True
        End If

    End If
End Sub

Private Sub LoadClassQBankList()
    Dim ary As New ArrayList
    ary.Add(1)
    ary.Add(2)
    ary.Add(3)

    Dim Os As List(Of Dempsey.OldeTestClassIndex) = Nothing
    Dim Oc As New Dempsey.OldeTestClassIndex_Controller
    Os = Oc._GetClassIndexData(0)

    Dim X = From w In Os Join l In ary On w.Active Equals l
            Where w.KT = 1 And w.RandomTest = 1
                    Select w

    Os = X.ToList

    With Me.ddlClassQBankList
        .DataSource = Os.OrderBy(Function(o) o.ClassTitle)
        .DataTextField = "ClassTitle"
        .DataValueField = "tblClassIndexID"
        .DataBind()
        .Items.Insert(0, New ListItem("Choose Class Title", "0"))
        .SelectedIndex = 0
    End With

End Sub
Protected Sub ddlClassQBankList_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles ddlClassQBankList.SelectedIndexChanged
    If Me.ddlClassQBankList.SelectedIndex > 0 Then
        Response.Redirect("ClassQBankList.aspx" & "?ClassIndexID=" & Me.ddlClassQBankList.SelectedValue)
    End If
End Sub

~~~~~~~~~~ 更多信息 我正在检查页面回发。当我从下拉列表中选择时,它会重定向到不同的页面。当我单击后退按钮并在另一个下拉列表中选择另一个值时,SelectedIndexChanged 都会触发。所以我需要对视图状态做些什么吗?在我重定向到其他页面之前?

【问题讨论】:

  • 您能否包含将事件连接到下拉列表的代码。
  • 我在页面加载时执行 page.ispostback=false 检查 是什么意思? not Page.IsPostBack时你在做什么?您应该只在not Page.IsPostBack 时将数据源绑定到它们。下拉菜单是级联的吗?我的意思是,它是否影响了一个选择的其他下拉目的SelectedIndex?你在两者的 SelectedIndexChangedEvent 中做什么?好的,这些问题多于答案,但也许它可以帮助您走上正轨。
  • 我突然想到他可能正在使用 VB.Net 使用“句柄”来连接事件,并且很可能复制粘贴了该方法并重命名了该方法,忘记了它处理的控件的更改。
  • 这可能是原因。我自己不止一次忘记了这一点。但这并不能解释为什么第一个下拉列表的 selectedindexchanged 事件在第二个被选中时发生。他提到第二个 ddl 的正确处理程序是第一次调用但不是第二次。
  • 他需要向我们展示他是如何将事件联系起来的。

标签: asp.net events drop-down-menu


【解决方案1】:

超级老,但对于那些仍然看到这个乏味答案的可怜人来说,您可能会在 Rick Strahl(同样老)的帖子中找到一些解脱:West Wind: ASP.NET ListBoxes, SelectedValue and ViewState

剧透警告:这有点老套,涉及到您自己的一些视图状态管理。

【讨论】:

    猜你喜欢
    • 2011-12-05
    • 1970-01-01
    • 2012-08-19
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多