.net如何防止刷新重新插入数据

ewdragon 2005-08-13 09:00:13
小弟最近做.net时发现当插入一条记录后点击刷新它又重新插入一次.如何才能让它不再重新刷新
...全文
429 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
同意 ztchen(感谢csdn,回馈csdn,每日答一贴) 的。

“当插入一条记录后点击刷新它又重新插入一次”,这是严重的误解!


做个小实例:

<%@ Page Language="vb" AutoEventWireup="true" Codebehind="WebForm1.aspx.vb" Inherits="WebApplication2.WebForm1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<body>
<form id="Form1" method="post" runat="server">
<asp:Label id="Label1" style="Z-INDEX: 101; LEFT: 296px; POSITION: absolute; TOP: 88px" runat="server">Label</asp:Label>
<br>
<asp:Button id="Button1" style="Z-INDEX: 102; LEFT: 288px; POSITION: absolute; TOP: 144px" runat="server"
Text="Button"></asp:Button>
</form>
</body>
</HTML>


Private Sub Button1_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles Button1.Click
Count += 1
Me.Label1.Text = Me.Count
End Sub

Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles MyBase.Load
Me.Label1.Text = Me.Count
End Sub

Private Property Count() As Integer
Get
If viewstate.Item("cnt") Is Nothing Then
Return 0
Else
Return viewstate.Item("cnt")
End If
End Get
Set(ByVal Value As Integer)
viewstate.Item("cnt") = Value
End Set
End Property


运行之后,点击按钮可以给计数器加1,然后“刷新”,可以看到根本不会启动计算。


之所以有重新计算问题,责任在于程序员写出来的代码流程。仔细分析你的流程为什么会造成这种重复计算问题。如果 page_load 就是用于显示,而不是用于处理操作的,不会发生此类事件。

我刚回了类似的帖子,这里就不重复了。http://community.csdn.net/Expert/topic/4287/4287839.xml?temp=.1823847
morality 2005-09-22
  • 打赏
  • 举报
回复
添加完以后重定向到另一个页面或重载一下本页!例如:

Page.RegisterStartupScript("AddSuccess","<script language='javascript'>alert('操作成功');window.location.href=window.location.href;</script>");
或者
Page.RegisterStartupScript("AddSuccess","<script language='javascript'>alert('操作成功!');window.location.href='addSuccess.aspx';</script>");
xwqjamky 2005-09-22
  • 打赏
  • 举报
回复
学习
yb2008 2005-09-22
  • 打赏
  • 举报
回复
添加完后直接

Response.Redirect("xxxxx.aspx");
lijie7552 2005-09-22
  • 打赏
  • 举报
回复
Response.Write("<script>window.location.href=window.location.href;</script>");
ztchen 2005-08-23
  • 打赏
  • 举报
回复
其实我觉得以http的机制来说,本身就不建议把执行数据库插入、更新或删除的操作放在page_load里执行,那样总会有楼主这样的问题。但这个问题其实是任何web程序里都需要面对的,解决途径大致有以下两种:
1.在数据库层面上进行逻辑判断,即将数据操作的逻辑判断封装在存储过程中,当执行数据操作时按逻辑规则判断重复性,再作数据操作,若不符合规则就忽略数据库操作。这个方法是比较推荐的,因为已经封装在存储过程中,在应用程序层面就只管调用,很方便灵活,效率也快,应用层代码容易管理。
2.在应用程序层面上进行逻辑判断,即将数据操作的逻辑判断放在应用程序的代码中。在page_load中先进行数据操作的逻辑判断,再执行数据操作。这个方法不是很推荐,因为首先需要在应用层调用数据库查询操作,效率肯定不如封装在存储过程中来得高。并且,从代码维护上这样也显得乱。除非你的数据操作逻辑规则无法实施,如进行扣费的操作,update costtable set cost=cost-100 ...你可能根本无法按主键或其他的逻辑来判断,那么就只能用这个方法。因为在应用程序层面上这个时候你就可以利用session机制来设置标志位以防止重复执行。
lovefootball 2005-08-23
  • 打赏
  • 举报
回复
在添加完后
Response.Write("<script>alert('操作成功');window.location.href=window.location.href;</script>");

如果需要保留添加好的信息,就写个js得函数处理一下就可以了,
hbtm 2005-08-23
  • 打赏
  • 举报
回复
最简单有效的方法是在操作完成后用
Response.Redirect()
重新把本页面打开一次就可以了
qgqchile 2005-08-22
  • 打赏
  • 举报
回复
每次插入数据后返回一个ID 号码,在插入前先判定就可以了
比如身份证号码什么的
很大程度上看你的数据库是如何设计的了
hchxxzx 2005-08-22
  • 打赏
  • 举报
回复
在插入结束之后,向页面输出一段脚本
Response.Write("<script>window.location.href=window.location.href;</script>");
Response.End();
上述方法,会导致页面的某些值失效,比如说分页信息.
如果有这方面需要,那么还有一个办法
在添加记录完成之后,向页面注册一个脚本,并且在页面中放一个隐藏的按钮,当页面加载完毕时,以脚本点击此按钮,页面重复提交一次,但并不会引起重复添加的动作.此后,再刷新页面也不会重复添加记录了.

ewdragon 2005-08-22
  • 打赏
  • 举报
回复
好像不行呀
smile9961 2005-08-13
  • 打赏
  • 举报
回复
主  题: 急!怎样防止页面刷新时,再次提交上次数据!
作  者: changezhong (小刀)
等  级:
信 誉 值: 99
所属社区: .NET技术 ASP.NET
问题点数: 100
回复次数: 43
发表时间: 2005-08-09 13:36:35

http://community.csdn.net/Expert/topic/4198/4198078.xml?temp=.1772272
jkv1 2005-08-13
  • 打赏
  • 举报
回复
我这里有个例子.你可以看看~
<% @ Page Clienttarget="DownLevel" %>
<% @ Import Namespace="System.Data" %>
<% @ Import Namespace="System.Data.OleDb" %>

<Script Language="C#" runat="server">

void On_Click(Object sender,EventArgs e)
{
OleDbConnection a=new OleDbConnection();
a.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Server.MapPath("1.mdb");
a.Open();
string sex=Male.Text;
if(Male.Checked) sex=Male.Text;
if(Female.Checked) sex=Female.Text;
string t="0";

if(Page.IsValid){
Convert.ToInt32(a5.Text);
string w="select UserName from a where UserName='"+a1.Text+"'";
OleDbCommand l=new OleDbCommand(w,a);
OleDbDataReader n=l.ExecuteReader();
while(n.Read())
{
t=n["UserName"].ToString();
}
n.Close();
if(t!=a1.Text)
{
string k="Insert into a(UserName,UserPass,Sex,Email,电话) values('"+a1.Text+"','"+a2.Text+"','"+sex+"','"+a4.Text+"','"+a5.Text+"')";
OleDbCommand b=new OleDbCommand(k,a);
b.ExecuteNonQuery();
Message.Text="OK!";
}
else
{
Message.Text="The UserName is existed!";
}
}
}
</script>

<form name="myform" runat="server">

UserName<asp:TextBox id="a1" size="25" ToolTip="Put Into Your Name" runat="server"/>
<asp:RequiredFieldValidator id="em" runat="server"
ControlToValidate="a1"
ErrorMessage="UserName必须输入!"
Display="dynamic"/><br>

UserPass<asp:TextBox id="a2" size="25" ToolTip="Hello How Are You!" runat="server"/>
<asp:RequiredFieldValidator id="pa" runat="server"
ControlToValidate="a2"
ErrorMessage="密码必须输入!"
Display="dynamic"/><br>

ConfirmUserPass<asp:TextBox id="a6" size="25" ToolTip="Hello How Are You!" runat="server"/>
<asp:CompareValidator id="paC" runat="server"
ControlToValidate="a2"
ControlToCompare="a6"
ErrorMessage="密码不匹配!"
Type="String"
Operator="Equal"
Display="dynamic"/>
<br>


Sex: <asp:RadioButton id="Male" Text="Male" GroupName="Sex" ToolTip="Hello How Are You!" runat="server"/>
<asp:RadioButton id="Female" Text="Female" GroupName="Sex" runat="server"/>
<asp:RequiredFieldValidator id="e2" runat="server"
ControlToValidate="a4"
ErrorMessage="Sex必须输入!"
Display="dynamic"/><br><br>

Email<asp:TextBox id="a4" size="20" ToolTip="Hello How Are You!" runat="server"/><asp:RequiredFieldValidator id="tt" runat="server"
ControlToValidate="a4"
ErrorMessage="Email必须输入!"
Display="dynamic"/><br><br>

电话<asp:TextBox id="a5" size="20" ToolTip="Hello How Are You!" runat="server"/>
<asp:RegularExpressionValidator id="sm" runat="server"
ControlToValidate="a5"
ValidationExpression="[0-9]{7,8}"
ErrorMessage="电话必须输入,且是7位到8位的整数!"
Display="dynamic"/>
<asp:RequiredFieldValidator id="sd" runat="server"
ControlToValidate="a5"
ErrorMessage="电话必须输入!"
Display="dynamic"/><br><br>

<asp:Button id="mybutton" onClick=On_Click runat="server" Text="analize"/><br>
<asp:Label id="Message" size="35" runat="server"/><br>

</form>

62,052

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧