zoukankan      html  css  js  c++  java
  • ASP.Net中防止页面刷新重复提交的几种方法

    1、也是最简单和最常用的办法,就是使用转向页面语句,分两种:
        a.使用服务器端的 Response.Redirect(Request.UrlReferrer.ToString());

        b.使用客户端脚本 <script language=javascript>location.href='yourPage';</script>
        这两种方法的缺点是如果要保留页面数据不太方便,如果不用保留可以采用。

    2、操作完毕设置一个Session,进入页面时判断这个Session是否为null,如果不是表示已经提交过了,但是缺点就是这个页面无法再提交了,必须在别的页面清空这个Session。

    Page_Load中加入  
    Response.Cache.SetNoStore();  
    //Session中存储的变量“IsSubmit”是标记是否提交成功的   
    if (!IsPostBack)  
    if (Session["IsSubmit"]==null)  
    Session.Add("IsSubmit",false);  
    if ((bool)Session["IsSubmit"])  
    {  
    //如果表单数据提交成功,就设“Session["IsSubmit"]”为false  
    Session["IsSubmit"] = false;  
    //显示提交成功信息  
    TextBox1.Text = " * 提交成功!";  
    }   
    else
    {//否则的话(没有提交,或者是页面刷新),不显示任何信息  
    TextBox1.Text = "";   
    Response.End();  
    }  
    提交按钮中加入  
    Session["IsSubmit"] = true;  
    Response.Redirect ("本页");  

    3、是从网上搜索到的一种方案,学习并共享一下:
    DetectRefresh.aspx  
    ===========================      
    <%@   Page   Inherits="StevenBey.Web.UI.Page"   %>  
    <html>  
    <head>  
    <title>Detecting   Page   Refresh   [Demo]</title>  
    </head>  
    <body>  
    <form   runat="server">  
    <asp:button   Text="Test   Refresh"   runat="server"   />  
    </form>  
    IsRefresh   =   <%=   IsRefresh   %>  
    </body>  
    </html>  

    StevenBey.Web.UI.Page.cs  
    ======================  
    namespace   StevenBey.Web.UI  
    {  
    public   class   Page   :   System.Web.UI.Page  
    {  
        private   bool   _refreshState;  
        private   bool   _isRefresh;  
       
        public   bool   IsRefresh  
        {  
          get  
          {  
          return   _isRefresh;  
          }  
        }  
       
        protected   override   void   LoadViewState(object   savedState)  
        {  
          object[]   allStates   =   (object[])   savedState;  
          base.LoadViewState(allStates[0]);  
          _refreshState   =   (bool)   allStates[1];  
          _isRefresh   =   _refreshState   ==   (bool)   Session["__ISREFRESH"];  
        }  
       
        protected   override   object   SaveViewState()  
        {  
          Session["__ISREFRESH"]   =   _refreshState;  
          object[]   allStates   =   new   object[2];  
          allStates[0]   =   base.SaveViewState();  
          allStates[1]   =   !_refreshState;  
          return   allStates;  
        }  
    }  
    }


    在提交事件
    这么写

    if (!IsRefresh)
                {...}

  • 相关阅读:
    OpenCV之图像归一化(normalize)
    虚拟机网络模式说明
    大端模式和小端模式
    ASCII、Unicode、UTF-8、UTF-8(without BOM)、UTF-16、UTF-32傻傻分不清
    MFC窗口通过OpenCV显示图片
    基于FFmpeg的Dxva2硬解码及Direct3D显示(五)
    PyQt5播放实时视频流或本地视频文件
    PyQt5信号与槽关联的两种方式
    PyCharm离线安装PyQt5_tools(QtDesigner)
    DC: 8
  • 原文地址:https://www.cnblogs.com/sntetwt/p/2074767.html
Copyright © 2011-2022 走看看