X龙@China .Net 'blog

需要的不仅仅是工作,而是通过努力得来的美好将来。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

防止页面重复提交

Posted on 2011-03-08 13:24  X龙  阅读(222)  评论(0编辑  收藏  举报
#region 是否防止用户多次提交页面
        
/// <summary>
        
/// 是否防止用户多次提交页面。默认为true。
        
/// 如果为true,则用户在提交页面时,会出现提示,防止用户在服务器响应之前再次提交。
        
/// </summary>
        public bool OneClick
        {
            
get
            {
                
string key = this.ClientID + "_OneClick";
                
if (ViewState[key] == null)
                {
                    ViewState[key] 
= true;
                }
                
return (bool)ViewState[key];
            }
            
set
            {
                
string key = this.ClientID + "_OneClick";
                ViewState[key] 
= value;
            }
        }
        
/// <summary>
        
/// 表单提交时的提示
        
/// </summary>
        protected string mOnSubmitTip = string.Empty;
        
protected string OnSubmitTip
        {
            
set
            {
                mOnSubmitTip 
= value;
            }
            
get
            {
                
if (mOnSubmitTip == "")
                {
                    
if (this.CurCulture == 2052)
                    {
                        mOnSubmitTip 
= "正在处理表单,请稍候....";
                    }
                    
else
                    {
                        mOnSubmitTip 
= "form process, please waiting....";
                    }
                }
                
return mOnSubmitTip;
            }
        }
        
/// <summary>
        
/// 重新生成html的头和尾
        
/// </summary>
        private void RebuildHtml()
        {
            
#region 增加在表单提交时,防止用户重复提交的措施

            
int curCtrl;
            
int count;
            HtmlForm form 
= null;

            
// 在form上添加提交事件
            for (curCtrl = 0, count = this.Controls.Count; curCtrl < count; curCtrl++)
            {
                form 
= this.Controls[curCtrl] as HtmlForm;

                
// 不为NULL
                if (form != null)
                {
                    
break;
                }
            }

            
// RETURN
            if (curCtrl == count)
            {
                
return;
            }

            form.Attributes[
"onsubmit"= "try{submitForm(this);}catch(e){}";

            
// onclick
            if (this.OneClick)
            {
                
// 增加显示提示信息的表格
                StringBuilder sb = new StringBuilder();
                sb.Append(
"<table id=\"show_panel_on_submit\" ");
                sb.Append(
"style=\"position:absolute;display:none;\" ");
                sb.Append(
"border=0 height=100% width=100%>");
                sb.Append(
"\n  <tr>");
                sb.Append(
"\n    <td align=center>");
                sb.Append(OnSubmitTip);
                sb.Append(
"\n    </td>");
                sb.Append(
"\n  </tr>");
                sb.Append(
"</table>");
                ((LiteralControl)Controls[
0]).Text += sb.ToString();

                
// 增加在表单提交时,隐藏表单并显示提示表格的脚本
                
// 注意:是否进行脚本事件,由页面验证控件内容是否为空决定
                sb = new StringBuilder();
                sb.Append(
"\n<script>");
                sb.Append(
"\nfunction submitForm(form) {");
                sb.Append(
"\n  if(document.all.validation_summary_on_form_submit.innerHTML == '') {");
                sb.Append(
"\n    form.style.display='none';");
                sb.Append(
"\n    document.all.show_panel_on_submit.style.display='';");
                sb.Append(
"\n  }");
                sb.Append(
"\n}");
                sb.Append(
"\n</script>");
                ((LiteralControl)Controls[
2]).Text += sb.ToString();

                
// 增加页面验证控件,
                
// 表单提交时,可通过检验该控件innerHTML来判断提交是否合法
                ValidationSummary vs = new ValidationSummary();
                vs.ID 
= "validation_summary_on_form_submit";
                vs.Attributes[
"style"= "position:absolute;top:-1000;left:-1000";
                form.Controls.Add(vs);
            }
            
#endregion
        }
        
// 修改记录2 2010-09-14 朱洁 添加 RebuildHtml(),是否防止用户多次提交页面 结束

        
#endregion
点击这里给我发消息http://wp.qq.com/index.html