asp.net一步步打造防止重复提交按钮

时间:2010-03-10 12:42:32  来源:第二电脑网  作者:第二电脑网

  第二电脑网导读:友说,这个按钮完全可以用js来做,是的。不过当你需要大量这种按钮时,是否为每一个都去编程而不封装一个呢?另外,为了增加其功能性,我们除了让他有防止重复提交的功能以外,还可以给他弹出提示框,就像单击删除按钮时,用户会受到一个提示再次确认是否真的删除。好,接下来,第一步:知识储备,我们知道,要防止重复提交,要在客户端设法使用户单击一次以后按...
  正文:

首先说说防止重复提交按钮是啥东西:
我们在访问有的网站,输入表单完成以后,单击提交按钮进行提交以后,提交按钮就会变为灰色,用户不能再单击第二次,直到重新加载页面或者跳转。这样,可以一定程度上防止用户重复提交导致应用程序上逻辑错误。有朋友说,这个按钮完全可以用js来做,是的。不过当你需要大量这种按钮时,是否为每一个都去编程而不封装一个呢?
另外,为了增加其功能性,我们除了让他有防止重复提交的功能以外,还可以给他弹出提示框,就像单击删除按钮时,用户会受到一个提示再次确认是否真的删除。

好,接下来,第一步:知识储备,
我们知道,要防止重复提交,要在客户端设法使用户单击一次以后按钮变灰,这种客户端行为显然只能借助js代码来完成,服务器端运行的ASP/ target=_blank class=infotextkey>asp.NET是做不到的。那要让客户端用户单击按钮后立即收到一条再次确认消息,在确认之前不会提交到服务器,也需要js代码。因此,我们基础的丝路就是在页面加载按钮时,一并把所需的js代码发送到客户端去。而该按钮都是适用js脚本,因此不影响服务器端行为。

第二步:从Button继承。
因为它是一个按钮,拥有按钮所需要的全部特征属性,因此我们就从System.Web.UI.WebControls.Button这个类继承。而防止重复提交按钮在按钮变成灰色以后,应该显示什么文本呢?新增一个AfterSubmitText属性来指示;采用一个Bool值“ShowMessageBox”属性来确定是否需要在客户端弹出提示;使用WarningText属性来指示客户端弹出提示的内容。

第三步:
现在,我们就来改写AddAttributesToRender方法,ASP.NET在渲染该控件到输出时,会调用该方法我们所改写的方法,以达到将JS代码发送到客户端的目的。具体代码如下:

"asp.net一步步打造防止重复提交按钮"由第二电脑网原创提供,转载请注明:http://www.002pc.com/master/College/Programming/aspnet/13178.html

 1/4    1 2 3 4 下一页 尾页


关键字:

关于《asp.net一步步打造防止重复提交按钮》文章的评论

        protected override void AddAttributesToRender(HtmlTextWriter writer)
        {
            System.Text.StringBuilder ClientSideEventReference = new System.Text.StringBuilder();

            if (((this.Page != null) && this.CausesValidation) && (this.Page.Validators.Count > 0))
            {
                ClientSideEventReference.Append("if (typeof(Page_ClientValidate) == 'function'){if (Page_ClientValidate() == false){return false;}}");
            }
            //ShowMessageBox?
            if (this.ShowMessageBox)
            {
                ClientSideEventReference.Append("if (!confirm('" + this.WarningText + "')){return false}");
            }
            ClientSideEventReference.AppendFormat("this.value = '{0}';", (string)this.ViewState["afterSubmitText"]);
            ClientSideEventReference.Append("this.disabled = true;");
            ClientSideEventReference.Append(this.Page.ClientScript.GetPostBackEventReference(this, string.Empty));


            writer.AddAttribute(HtmlTextWriterAttribute.Onclick, ClientSideEventReference.ToString(), true);
            base.AddAttributesToRender(writer);
        }
站内搜索: 高级搜索

热门搜索: Windows style 系统 tr IP QQ CPU 安装 function 注册 if td