Asp.net 每次回发dropdownlist项目重复后

Asp.net 每次回发dropdownlist项目重复后,asp.net,vb.net,databound,Asp.net,Vb.net,Databound,我已将我的dropdownlist与数据库绑定。但每次回发时,dropdownlist中的项目都会再次重复 e、 g。 在页面加载时,我在dropdownlist 1,2,3,4中有此项。。等现在假设页面得到回发,那么它看起来像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 S

我已将我的dropdownlist与数据库绑定。但每次回发时,dropdownlist中的项目都会再次重复

e、 g。 在页面加载时,我在dropdownlist 1,2,3,4中有此项。。等现在假设页面得到回发,那么它看起来像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
更新

我有母版页,上面有城市的下拉列表。我正在使用母版页控件来编辑mycontent页面,如下所示

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

现在在我的PopulateArea()类中有一个查询,其中WHERE子句具有cityselector。因此,根据城市的情况,我的区域被提取。

这很简单。。每次回发任何内容时都会触发页面加载事件

用这个

    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

这很简单。。每次回发任何内容时都会触发页面加载事件

用这个

    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

在not postback事件中调用函数,这样就不会在postback事件中调用下拉列表(这会填充所有内容)


在not postback事件中调用函数,这样就不会在postback事件中调用下拉列表(这会填充所有内容)


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

areasList.Items.Clear()

还可以看到
AppendDataBoundItems
不是真的:在.aspx页面中如果回发时必须更改下拉列表值。最初说出值,其中1,2,3,4和在回发时如果值必须为2,3,4,5,则根据您在表单控件上更改的某些值,必须先清除下拉列表值,然后向其中添加新值

areasList.Items.Clear()
还可以看到
AppendDataBoundItems
不正确:在.aspx页面中

将代码更改为

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
将代码更改为

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

这是因为您已将代码放在回发子句中。把它放在Not Postback子句中。@yogihosting我有母版页,在母版页下我可以对所有城市进行下拉控制。现在我正在使用母版页控件创建我的内容页。如果我照你说的做,那么在这个地区什么也得不到回报。看到我的更新帖子我想现在你的下拉控件在母版页。因此,您必须在母版页本身的not postback子句中编写代码,因为此处的母版页控件(dropdownlist)不会在内容页中直接访问。您还可以通过使用F9键在Visual Studio中放置断点来检查它给出的错误。这是因为您已将代码放置在回发子句中。把它放在Not Postback子句中。@yogihosting我有母版页,在母版页下我可以对所有城市进行下拉控制。现在我正在使用母版页控件创建我的内容页。如果我照你说的做,那么在这个地区什么也得不到回报。看到我的更新帖子我想现在你的下拉控件在母版页。因此,您必须在母版页本身的not postback子句中编写代码,因为此处的母版页控件(dropdownlist)不会在内容页中直接访问。您还可以通过使用F9键在VisualStudio中放置断点来检查它给出的错误。