现在的位置: 首页 > 综合 > 正文

asp.net禁止页面刷新导致重复提交

2018年01月23日 ⁄ 综合 ⁄ 共 1521字 ⁄ 字号 评论关闭

网上找到的一个办法,也可以解决 用回车键代替提交按钮时,用户常按回车(非常快速的点回车)导致重复提交的情况: 

public class SubmitOncePage : System.Web.UI.Page
    {
        private string _strSessionKey;
        private string _hiddenfieldName;
        private string _strLastViewstate;

        public SubmitOncePage()
        {
            _hiddenfieldName = "__LastVIEWSTATE_SessionKey";
            _strSessionKey = System.Guid.NewGuid().ToString();
            _strLastViewstate = string.Empty;
        }

        public bool IsRefreshed
        {
            get
            {
                string str1 = GetSessinContent();
                _strLastViewstate = str1;
                string str2 = this.Session[GetSessinKey()] as string;
                bool flag1 = (str1 != null) && (str2 != null) && (str1 == str2);
  //str1就是Request.Form["__VIEWSTATE"];经过MD5加密
                return flag1;
            }
        }

        protected override void Render(System.Web.UI.HtmlTextWriter writer)
        {
            string str = GetSessinKey();
            this.Session[str] = _strLastViewstate;
            this.RegisterHiddenField(_hiddenfieldName, str);
            base.Render(writer);
        }

        private string GetSessinKey()
        {
            string str = this.Request.Form[_hiddenfieldName];
            return (str == null) ? _strSessionKey : str;
        }

        private string GetSessinContent()
        {
            string str = this.Request.Form["__VIEWSTATE"];
            if (str == null)
            {
                return null;
            }
            return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str, "MD5");
        }

    }

然后再用自己的类继承此类 直接使用IsRefreshed就可以判断是否是刷新了

抱歉!评论已关闭.