2011-05-31 75 views
0

我有一个简单的ASP.NET页面:的Page_Load不更新后点击按钮

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=" & 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=" & 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页面生命周期中,页面加载发生在按钮点击之前(我知道,这有点奇怪)。最简单的解决方法是将代码放入页面“PreRender”事件中。

+0

@nvcnvn,这就是答案! – Alaa 2012-11-06 13:28:20

+0

请检查我的答案作为答案。谢谢 – boruchsiper 2012-11-06 17:14:27

1

你有没有在你的页面加载事件添加!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=" & 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 
1

使用,如果(!的IsPostBack)在页面加载。

0

试试这个

<%@ 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=" & 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=" & 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> 
+0

:((没帮助! – nvcnvn 2011-06-03 03:54:52

+0

现在你遇到了什么问题 – 2011-06-03 05:01:48