首頁  >  問答  >  主體

防止ASP.NET VB.NET中下拉清單複製項目的方法

Public Sub Table()      
    Dim Connection As MySqlConnection

    Dim DataAdapter As MySqlDataAdapter
    Dim Command As MySqlCommand
    Connection = New MySqlConnection("server=localhost; userid=root; database=setting;")
    Command = New MySqlCommand("Select * FROM table", 
    Connection)
    DataAdapter = New MySqlDataAdapter(Command)
    Dim DataTable As New DataSet
    DataAdapter.Fill(DataTable)
    Ddlname.DataSource = DataTable
    Ddlname.DataTextField = "Name"
    Ddlname.DataValueField = "Name"
    Ddlname.DataBind()
End Sub

P粉299174094P粉299174094429 天前519

全部回覆(1)我來回復

  • P粉883973481

    P粉8839734812023-09-08 00:04:54

    您沒有展示您的標記,但請記住,任何按鈕點擊、具有自動回發的控製或頁面上的任何事件觸發都會重新運行頁面加載事件。

    因此,理論上,即使只是一個簡單的按鈕點擊,也可能會重新運行載入組合框的程式碼。因此,每個事件,每次點擊都可能會再次新增或載入組合框。

    因此,幾乎每個頁面的設計模式都是只載入一次網格、列錶框、下拉框等。

    因此,您的程式碼應該如下所示:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            LoadTable()
        End If
    End Sub
    
    
    Public Sub LoadTable()
    
        Using Connection As New MySqlConnection("server=localhost; userid=root; database=setting;")
    
            Using Command As New MySqlCommand("SELECT * from table", Connection)
                Connection.Open
                Dim MyTable As New DataTable
                MyTable.Load(Command.ExecuteReader)
                Ddlname.DataSource = DataTable
                Ddlname.DataTextField = "Name"
                Ddlname.DataValueField = "Name"
                Ddlname.DataBind()
            End Using
        End Using
    
    End Sub

    因此,請確保您的頁面載入程式碼具有非常重要的 If Not IsPostBack,這樣您才能真正只載入 執行一次載入組合方塊的程式碼。

    因此,這個「是回發」測試?你的99%頁面都會這樣運作。我經常認為asp.net頁面應該有一個“firstLoad”事件,因為頁面加載每次都會觸發,對於任何按鈕和觸發頁面回發的任何程式碼都是如此。因此,您的組合框將一次又一次地加載(並增長),因為您每次加載頁面時都會運行加載網格、列錶框或下拉列表的程式碼。因此,請採用、使用和「喜歡」IsPostBack測試-您對所有頁面都要這樣做,而且99%甚至更多的頁面都需要進行這個測試。

    事實上,如果您不採用上述建議,您幾乎無法建立任何功能性的網頁。

    回覆
    0
  • 取消回覆