您的位置:首页 > 编程语言 > ASP

ASP.NET防止多次提交处理2种常用方法

2012-12-14 10:36 246 查看
1.它的原理是:asp.net页面提交的时候会调用ValidatorOnSubmit方法(内置的),我们利用js方法的覆盖特性,把系统内置的ValidatorOnSubmit替换成我们的版本,然后当执行ValidatorOnSubmit时屏蔽掉页面上所有提交按钮(也可以执行你自己的方法)
//屏蔽所有提交按钮
function disableOtherSubmit(){
var obj = event.srcElement;
var objs = document.getElementsByTagName('INPUT');
for(var i=0; i<objs.length; i++) {
    if(objs.type.toLowerCase() == 'submit') {
      objs.style.display = 'none';
    }
  }
}

//覆盖原有ValidatorOnSubmit方法,防止2次提交
function ValidatorOnSubmit() {
  if (Page_ValidationActive) {
    if (ValidatorCommonOnSubmit()) {
      disableOtherSubmit();
      return true;
    }

  else {
      return false;
    }
  }

else {
    disableOtherSubmit();
    return true;
  }
}

2.在后台来处理.例如:
  protected void Page_Load(object sender, EventArgs e)
  {
    //.net1.1
    Button1.Attributes.Add("onclick", "this.disabled=true;" + this.GetPostBackEventReference(this.Button1));
    //.net 2.0以上
    Button1.Attributes.Add("onclick", "this.disabled=true;" + this.ClientScript.GetPostBackEventReference(Button1, ""));
  }
  为了测试,我们可以建立一个页面,加入一个btnAdd按钮
  <%@ Page Language="C#" AutoEventWireup="true" CodeFile="AddAndEditUser.aspx.cs" Inherits="AddUser" %><html xmlns="http://www.w3.org/1999/xhtml">
  <head runat="server">
  <title>添加和编辑页面示例</title>
  </head>
  <body>
  <form id="frmMain" runat="server">
  <asp:Button ID="btnAdd" runat="server" CssClass="INPUT-BUTTON-Save" OnClick="btnAdd_Click">
  </asp:Button>
  </form>
  </body>
  </html>
  /*----------------------------------------------------------------
  using System;
  using System.Collections;
  using System.Configuration;
  using System.Data;
  using System.Linq;
  using System.Web;
  using System.Web.Security;
  using System.Web.UI;
  using System.Web.UI.HtmlControls;
  using System.Web.UI.WebControls;
  using System.Web.UI.WebControls.WebParts;
  using System.Xml.Linq;
  public partial class AddUser : System.Web.UI.Page
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      btnAdd.Attributes.Add("onclick", "this.disabled=true;" + this.ClientScript.GetPostBackEventReference(btnAdd, ""));
    }     
    protected void btnAdd_Click(object sender, EventArgs e)
    {
      //模拟网络拥塞5秒钟
      System.Threading.Thread.Sleep(5000);
    }
  }
  可见当点击了按钮,需要等5秒钟按钮才能点击。即页面回发一后按钮才能用。这样可以有效的防止用户多次点击按钮,造成多次提交!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: