问题描述
|
我有一个简单的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>