Загрузка страницы не обновляется после нажатия кнопки

#asp.net #vb.net

#asp.net #vb.net

Вопрос:

У меня есть простой ASP.NET страница:

 sub Page_Load
    //Get data form databse and show it
end sub

sud deletsome(Source As Object, e As EventArgs)
    //delete one record when user click on submit button
end sub
  

Когда я нажимаю кнопку, страница перезагружается, все данные не меняются, я должен повторно войти на страницу снова, запись, которую я удалил, исчезнет.
Можете ли вы показать мне, почему?

Полный код здесь:

 <%@ Import Namespace="System.Data.OleDb" %>

<script  runat="server">

sub Page_Load
    dim dbconn,sql,dbcomm,dbread
    dbconn=New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Persist Security Info=False;data source=" amp; server.mappath("/data/test.accdb"))
    dbconn.Open()
    sql="SELECT * FROM [user]"
    dbcomm=New OleDbCommand(sql,dbconn)
    dbread=dbcomm.ExecuteReader()
    customers.DataSource=dbread
    customers.DataBind()
    dbread.Close()
    dbconn.Close()
end sub

sub deletesome(Source As Object, e As EventArgs)
    dim dbconn,sql,dbcomm
    dbconn=New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Persist Security Info=False;data source=" amp; server.mappath("/data/test.accdb"))
    dbconn.Open()
    sql="DELETE FROM [user]WHERE id = @ID"
    dbcomm=New OleDbCommand(sql,dbconn)
    dbcomm.Parameters.AddWithValue("ID", tb1.Text)
    dbcomm.ExecuteNonQuery()    
end sub
</script>

<html>
<body>

<form runat="server">
    <asp:TextBox id="tb1" runat="server" />
    <asp:Button id="b1" Text="Submit" runat="server" OnClick="deletesome" />
    <asp:Repeater id="customers" runat="server">

        <HeaderTemplate>
            <table border="1" width="100%">
            <tr bgcolor="#b0c4de">
                <th>ID</th>
                <th>Address</th>
                <th>City</th>
            </tr>
        </HeaderTemplate>

        <ItemTemplate>
            <tr bgcolor="#f0f0f0">
                <td><%#Container.DataItem("id")%> </td>
                <td><%#Container.DataItem("username")%> </td>
                <td><%#Container.DataItem("userphone")%> </td>
            </tr>
        </ItemTemplate>

        <FooterTemplate>
            </table>
        </FooterTemplate>

    </asp:Repeater>
</form>
<hr />

</body>
</html>
  

Ответ №1:

В жизненном цикле страницы asp загрузка страницы происходит до нажатия кнопки (я знаю, это немного странно). Самый простой способ обойти это — поместить ваш код в событие «Предварительной загрузки» страницы.

Комментарии:

1. Пожалуйста, отметьте мой ответ в качестве ответа. Спасибо

Ответ №2:

Используйте, если(!IsPostBack) при загрузке страницы.

Ответ №3:

Вы не добавили !IsPostBack условие в событие загрузки страницы. Когда вы нажимаете кнопку, событие загрузки вашей страницы сначала вызывается перед обработчиком события click, и он снова перезагружает данные. В этом проблема.

Это должно быть похоже…

 sub Page_Load
IF(!IsPostBack) ' This condition will be true when the page loads the first time 

dim dbconn,sql,dbcomm,dbread
dbconn=New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Persist Security Info=False;data source=" amp; server.mappath("/data/test.accdb"))
dbconn.Open()
sql="SELECT * FROM [user]"
dbcomm=New OleDbCommand(sql,dbconn)
dbread=dbcomm.ExecuteReader()
customers.DataSource=dbread
customers.DataBind()
dbread.Close()
dbconn.Close()

EndIf
end sub
  

Ответ №4:

попробуйте это

     <%@ Import Namespace="System.Data.OleDb" %>

    <script  runat="server">

    sub Page_Load
        If Page.IsPostBack = False Then
            LoadData()
    end sub

    sub deletesome(Source As Object, e As EventArgs)
        dim dbconn,sql,dbcomm
        dbconn=New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Persist Security Info=False;data source=" amp; server.mappath("/data/test.accdb"))
        dbconn.Open()
        sql="DELETE FROM [user]WHERE id = @ID"
        dbcomm=New OleDbCommand(sql,dbconn)
        dbcomm.Parameters.AddWithValue("ID", tb1.Text)
        dbcomm.ExecuteNonQuery()  

        LoadData()  
    end sub

    sub LoadData
        dim dbconn,sql,dbcomm,dbread
        dbconn=New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Persist Security Info=False;data source=" amp; server.mappath("/data/test.accdb"))
        dbconn.Open()
        sql="SELECT * FROM [user]"
        dbcomm=New OleDbCommand(sql,dbconn)
        dbread=dbcomm.ExecuteReader()
        customers.DataSource=dbread
        customers.DataBind()
        dbread.Close()
        dbconn.Close()
    end sub
    </script>

    <html>
    <body>

    <form runat="server">
        <asp:TextBox id="tb1" runat="server" />
        <asp:Button id="b1" Text="Submit" runat="server" OnClick="deletesome" />
        <asp:Repeater id="customers" runat="server">

            <HeaderTemplate>
                <table border="1" width="100%">
                <tr bgcolor="#b0c4de">
                    <th>ID</th>
                    <th>Address</th>
                    <th>City</th>
                </tr>
            </HeaderTemplate>

            <ItemTemplate>
                <tr bgcolor="#f0f0f0">
                    <td><%#Container.DataItem("id")%> </td>
                    <td><%#Container.DataItem("username")%> </td>
                    <td><%#Container.DataItem("userphone")%> </td>
                </tr>
            </ItemTemplate>

            <FooterTemplate>
                </table>
            </FooterTemplate>

        </asp:Repeater>
    </form>
    <hr />

    </body>
    </html>
  

Комментарии:

1. Теперь, какую проблему вы получаете