如何解决单击按钮后,Page_Load不会更新
| 我有一个简单的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=\" & 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,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>
解决方法
在ASP页面的生命周期中,页面加载发生在按钮单击之前(我知道,这很奇怪)。最简单的解决方法是将您的代码放置在页面“ PreRender \”事件中。
, 在页面加载时使用if(!IsPostBack)。
, 您尚未在页面加载事件中添加“ 2”条件。当您单击按钮时,将首先在click事件处理程序之前调用页面的load事件,它将再次重新加载数据。这就是问题所在。
应该像...
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
, 尝试这个
<%@ 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,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,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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。