前段时间做项目,在提交完数据后刷新页面,会弹出要你重试的对话框,当点击重试就会发生重复提交的问题,任何查了一下问题,搜集了一些可用的解决方案:
1.请求转发(执行数据库中的更新操作后立即转跳到其他页面,防止页面刷新引起回发操作)。
2.重新加载该页面(通过JavaScript来设置当执行操作后重新加载该页面:)。
3. 不保存缓存(即提交后表单上的数据不会被浏览器的缓存保存,如果此时再遇到刷新或者后退请求时, 就会显示“网页已过期”,数据也就不会重复提交了,这就起到了阻止刷新重复提交的效果。
protected void Page_Load(object sender, EventArgs e) { //可以在页面加载时设置页面的缓存为“SetNoStore()”,即无缓存 Response.Cache.SetNoStore(); //Session中存储的变量“IsSubmit”是标记是否提交成功的 if ((bool)Session["IsSubmit"]) { //如果表单数据提交成功,就设“Session["IsSubmit"]”为false Session["IsSubmit"] = false; //显示提交成功信息 ShowMsg.Text = " * 提交成功!"; } else //否则的话(没有提交,或者是页面刷新),不显示任何信息 ShowMsg.Text = ""; } //提交按钮(btnOK)单击事件 protected void btnOK_Click(object sender, EventArgs e) { if (txtTitle.Text.ToString().Trim() == "") //ShowMsg是用来显示提示信息的 ShowMsg.Text = " * 标题不能为空!"; else if (txtText.Text.ToString().Trim() == "") ShowMsg.Text = " * 内容不能为空!"; else { //这里是将数据提交到数据库中,省略 /* string sql = "insert into tab...values(...)"; MyConn.ExecQuery(sql); */ //提交成功后,设“Session["IsSubmit"]”为true Session["IsSubmit"] = true; //强制转换页面(不可少,否则刷新仍会重复提交,仍转到本页), 通过页面的转换将缓存中的提交的数据都释放了,即提交的标单数据不会被保存到缓存里, 如果后退的话,将会出现该页无法显示 Response.Redirect("post.aspx"); } }
(详情参见: http://www.cnblogs.com/zpq521/archive/2007/08/14/854631.html))
4.MSDN的一种解决方案: 它是通过重新定义 System.Web.UI.Page 类来实现加载页面时,是“刷新”、“后退”请求,还是正常请求,其他的页面则继承了自定义的这 个Page类
(详情参见:http://msdn.microsoft.com/zh-cn/library/ms379557(VS.80).aspx )
(1)引用程式集合
(2)在web.config中添加
<httpModules>
<add name="MsdnModule" type="Msdn.RefreshModule, MsdnExt"/>
</httpModules>
(3) 页面继承Msdn.Page
(4)在更新的代码中使用
void AddContactButton_Click(object sender, EventArgs e) {
if (!IsPageRefresh)
{
......//更新代码
TrackRefreshState();
}
5.最好的防止"刷新"是代码被重复调用的方法还是在服务器端做检查, 并经行处理.
下面的代码放在page_load方法中, 它可以检测"刷新":
bool IsPageRefresh = false; //this section of code checks if the page postback is due to genuine submit by user or by pressing "refresh" if (!IsPostBack) { ViewState["ViewStateId"] = System.Guid.NewGuid().ToString(); Session["SessionId"] = ViewState["ViewStateId"].ToString(); } else { if (ViewState["ViewStateId"].ToString() != Session["SessionId"].ToString()) { IsPageRefresh = true; } Session["SessionId"] = System.Guid.NewGuid().ToString(); ViewState["ViewStateId"] = Session["SessionId"].ToString(); }
之后, 就可以在后台代码中用"IsPageRefresh"来判断一个PostBack是来自用户点击按钮还是浏览器的"刷新"啦.
相关推荐
页面提交后,后退,刷新会重复提交,导致很多麻烦,.net里可以这样来解决一下,一个类文件,省去每个页面都写的麻烦
在ASP.NET web应用程序中,"刷新重复提交"是一个常见的问题,它发生在用户点击浏览器...总的来说,理解和掌握防止ASP.NET刷新重复提交的方法对于构建健壮的Web应用至关重要,因为它直接关系到数据的安全性和用户体验。
如果随机码不匹配,则表明用户可能是通过刷新页面或点击后退按钮进行操作,此时系统将忽略这个提交请求,不进行任何数据处理,从而避免了重复提交的问题。 这种方法的优点在于它保留了缓存带来的性能优势,适用于...
在Web开发中,用户在提交表单后可能会意外地点击浏览器的刷新或后退按钮,导致数据重复提交,这在...例如,利用ASP.NET的ViewState、Session或Cookie等特性,结合服务器端和客户端的代码来达到防止重复提交的目的。
在ASP.NET开发中,防止用户通过浏览器的后退按钮重复提交表单是一个常见的问题,因为这可能导致数据的不一致性和数据库的错误。以下是一些防止这种情况的方法和相关的知识点: 1. **利用HTTP响应头控制缓存** - `...
在ASP.NET开发中,实现多页签页面切换是一种常见的用户界面设计,它可以提供更好的用户体验,让用户在一个页面上浏览和操作多个相关的内容区域。本篇将详细介绍如何在ASP.NET环境中实现这样的功能,主要涉及的知识点...
浏览器会有“不重新发送信息,则无法刷新网页”的提示,若刚刚执行的恰好是往数据库插入一条新记录的操作,点[重试]的结果是插入了两条重复的记录,以前一直是用保存数据后重新转向当前页面的方法解决,最近又找到了...
在ASP.NET中,页面间或页面内的数据传递是至关重要的,它允许我们维持用户的状态信息,或者在不同请求之间传递数据。本篇文章将详细介绍三种常见的页面传值方法:Session、QueryString和Server.Transfer。 1. ...
ASP.NET是一种基于.NET框架的服务器端编程环境,用于构建动态Web应用程序。在ASP.NET中创建一个简单的万年历是一项常见的任务,它可以帮助用户查看任何年份的日历,并进行相关的日期操作。下面,我们将深入探讨如何...
总的来说,"ASP.NET 网页浏览器"项目是一个结合了ASP.NET Web开发知识和C#桌面应用开发技术的实践案例,对于希望扩展技能树或深入了解.NET平台的开发者来说,这是一个宝贵的资源。通过研究和分析这个项目,开发者...
ASP.NET WebBrowser 控件是.NET Framework 提供的一个强大的组件,用于在ASP.NET应用程序中嵌入一个基于Internet Explorer的浏览器。这个控件允许开发者在网页应用中实现与网页交互的功能,如自动化网页操作、页面...
3. AJAX:ASP.NET的AJAX扩展可以实现无刷新更新,使图片轮播在不重新加载整个页面的情况下进行。利用UpdatePanel或jQuery的AJAX方法,可以在后台处理图片切换逻辑,然后仅更新轮播区域。 4. 定时器:JavaScript的`...
ASP.NET AJAX 控件工具包是ASP.NET框架的一部分,它提供了丰富的客户端控件和扩展器,以增强Web应用程序的用户体验和交互性。这个工具包利用AJAX(Asynchronous JavaScript and XML)技术,允许部分页面更新,减少了...
ASP.NET是Microsoft开发的一种用于构建Web应用程序的框架,它提供了丰富的功能和工具,使得开发者能够高效地构建动态、数据驱动的网站。在面试中,掌握ASP.NET的基础知识是非常关键的,而AJAX技术则常常是面试中讨论...
这是由于Session的安全保护机制导致的,因为浏览器在POST提交后尝试刷新页面,服务器会认为这是重复提交的请求,可能会拒绝执行,导致“网页过期”的错误提示。解决这个问题的一个方法是使用location.replace()方法...
在这个项目中,ASP.NET主要负责处理用户请求、与数据库交互、控制页面流程等。例如,`Default.aspx`是一个ASP.NET网页文件,它定义了用户在浏览器中看到的界面结构和样式。而`Default.aspx.cs`是对应的后台代码文件...
5. **PageMethods** 和 **WebServices**:ASP.NET AJAX支持直接从客户端JavaScript调用服务器端的PageMethods或WebServices,实现数据的异步获取和提交。 6. **Partial Page Rendering**:ASP.NET AJAX实现了部分...
在.NET开发中,有时我们需要对Web应用程序的用户体验进行一定的控制,比如防止用户通过浏览器的后退按钮、功能键(如F5刷新或Ctrl+S保存)或者鼠标右键菜单执行特定操作。这通常是为了保护数据的一致性,防止未授权...