【问题标题】:After every postback dropdownlist items repeats在每个回发下拉列表项重复之后
【发布时间】:2016-03-14 21:43:31
【问题描述】:

我已将我的下拉列表与数据库绑定。但是在每个 PostBack 上,下拉列表中的项目会再次重复。

例如 OnPage Load 我在下拉列表中有这些项目 1,2,3,4.. 等 现在假设页面获取 postBack 然后它看起来像 1,2,3,4,1,2,3,4

Vb代码

Private Sub hospitals_Load(sender As Object, e As EventArgs) Handles Me.Load
Me.PopulateAreas()
End Sub


Private Sub PopulateAreas()
        If IsPostBack Then
            Dim citySelector As DropDownList = Page.Master.FindControl("locationSelector")
            Using conn As New MySqlConnection()
                conn.ConnectionString = ConfigurationManager _
                    .ConnectionStrings("conio").ConnectionString()
                Using cmd As New MySqlCommand()
                    cmd.CommandText = "Select * from areas where areaCity Like '" + citySelector.SelectedItem.ToString + "%'"
                    cmd.Connection = conn
                    conn.Open()
                    Using sdr As MySqlDataReader = cmd.ExecuteReader()
                        While sdr.Read()
                            Dim item As New ListItem()
                            item.Text = sdr("areaName").ToString()
                            item.Value = sdr("areaID").ToString()
                            'item.Selected = Convert.ToBoolean(sdr("IsSelected"))
                            areasList.Items.Add(item)
                        End While
                    End Using
                    conn.Close()
                End Using
            End Using
        End If

更新

我有包含城市下拉列表的母版页。我正在对我的内容页面使用母版页控件,如下所示。

Dim citySelector As DropDownList = Page.Master.FindControl("locationSelector")

现在在我的 PopulateArea() 类中有查询,其中 WHERE 子句具有城市选择器。因此,根据城市,我的区域被获取。

【问题讨论】:

  • 那是因为您已将代码放在回发子句中。将其放在 Not Postback 子句中。
  • @yogihosting 我有母版页,在该母版页下我有所有城市的 dropDowncontrol。现在我正在对我的内容页面使用母版页控件。如果我按照您所说的方式进行操作,那么该地区将一无所获。查看我的更新帖子
  • 我认为现在您的下拉控件位于母版页中。所以你必须在母版页本身的not postback子句中编写代码,因为这里的母版页控件(下拉列表)不会直接在内容页中访问。您还可以通过使用 F9 键在 Visual Studio 中放置断点来检查它给出的错误。

标签: asp.net vb.net databound


【解决方案1】:

在 not postback 事件中调用你的函数,这样就不会在 postback 事件上调用下拉菜单(它会填充所有内容)。

Private Sub hospitals_Load(sender As Object, e As EventArgs) Handles Me.Load
    if ispostback = false then
        Me.PopulateAreas()
    end if
End Sub

【讨论】:

    【解决方案2】:

    它非常简单.. 每次回发任何内容时都会触发页面加载事件。

    使用这个

        Private Sub hospitals_Load(sender As Object, e As EventArgs) Handles Me.Load
          If Page.IsPostBack Then
    
            //do stuff when post back occurs
    
          Else
    
            Me.PopulateAreas() //put this function here so that it executes only once
          End If
        End Sub
    

    【讨论】:

      【解决方案3】:

      如果您的下拉值必须在回发时更改。最初说出 1,2,3,4 和回发时的值,如果值必须是 2,3,4,5,则基于您在表单控件上更改的一些值,您必须先清除下拉值,然后然后为其添加新值。

      areasList.Items.Clear()
      

      另请参阅 AppendDataBoundItems 不正确:在您的 .aspx 页面中

      【讨论】:

        【解决方案4】:

        将您的代码更改为,

        Private Sub PopulateAreas()
            If IsPostBack Then
                areasList.Items.clear()
                Dim citySelector As DropDownList = Page.Master.FindControl("locationSelector")
                Using conn As New MySqlConnection()
                    conn.ConnectionString = ConfigurationManager _
                        .ConnectionStrings("conio").ConnectionString()
                    Using cmd As New MySqlCommand()
                        cmd.CommandText = "Select * from areas where areaCity Like '" + citySelector.SelectedItem.ToString + "%'"
                        cmd.Connection = conn
                        conn.Open()
                        Using sdr As MySqlDataReader = cmd.ExecuteReader()
                            While sdr.Read()
                                Dim item As New ListItem()
                                item.Text = sdr("areaName").ToString()
                                item.Value = sdr("areaID").ToString()
                                'item.Selected = Convert.ToBoolean(sdr("IsSelected"))
                                areasList.Items.Add(item)
                            End While
                        End Using
                        conn.Close()
                    End Using
                End Using
            End If
        End Sub
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-02
          • 1970-01-01
          相关资源
          最近更新 更多