您的位置:首页 > 其它

防止页面重复提交

2011-03-08 13:24 232 查看
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: