知识大全 防止用户反复提交

Posted

篇首语:运气就是机会碰巧撞到了你的努力。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 防止用户反复提交相关的知识,希望对你有一定的参考价值。

Loading控件:防止用户反复提交  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Web系统中经常会遇到这样的情况 页面提交很慢 用户耐心受到挑战就开始摧残页面上的按钮 反复点击反而搞得更慢 前两天就遇到这样一个问题 用户要进行大数据量的导出操作 这个服务器端需要比较长的时间处理 于是很容易出现用户等得不耐烦就反复点击导出按钮的情况

  比较简单的解决方法就是在用户进行了点击操作将按钮之类的东西隐藏掉 国外的一位同行写了一个对button的扩展 pleasewaitButton 源文档 <; 就是实现了这个效果 但是这个控件是有局限的 有时候要隐藏的不只是按钮 我觉得可以学习UpdatePanel的 包起来 一个区域的方式以获得更大的灵活性

  下面是页面代码的一个示例          <%@ Page Language= C# AutoEventWireup= true CodeFile= Default aspx cs Inherits= _Default %>        <%@ Register Assembly= KingWebControlToolkit Namespace= KingWebControlToolkit TagPrefix= King %>        <!DOCTYPE PUBLIC //W C//DTD XHTML Transitional//EN transitional dtd >        < xmlns= >        <head runat= server >            <title>Untitled Page</title>        </head>        <body>            <form id= form runat= server >                <div>                    <King:LoadingControl runat= server >                        <ContentTemplate>                            <asp:Button ID= Button runat= server Text= Button />                        </ContentTemplate>                        <ProgressTemplate>                            <img src= loader gif />Loading                        </ProgressTemplate>                    </King:LoadingControl>                </div>            </form>        </body>        </>

  为了能看到Loading的效果我们在Page_Load中使用System Threading Thread Sleep( );做延迟

  页面render出来的代码如下          <!DOCTYPE PUBLIC //W C//DTD XHTML Transitional//EN transitional dtd >        < xmlns= >        <head><title>            Untitled Page        </title></head>        <body>            <form name= form method= post action= default aspx id= form >        <div>        <input type= hidden name= __VIEWSTATE id= __VIEWSTATE value= /wEPDwULLTEzMTA NTM NzBkZLrTZqXsuouOmVoeCXorqE igxmz />        </div>                <div>                    <span><span onclick= javascript:this style display= none ;document getElementById( progress ) style display= ; id= content >                            <input type= submit name= ctl $Button value= Button id= ctl _Button />                        </span><span id= progress >                            <img src= loader gif />Loading                        </span></span>                </div>        <div>            <input type= hidden name= __EVENTVALIDATION id= __EVENTVALIDATION value= /wEWAgLd PGLAgLbhbjtDTVN GhBUNr cM jWUdhLBytV />        </div></form>        </body>        </>

  控件实现

  其实就两个要点

  控件要支持两个模板一个是ContentTemplate这个是要隐藏部分的模板 一个是Progress模板用来放Loading的提示信息添加javascript脚本来实现隐藏 这个利用事件传递的原理可以方便的实现这个控件超简单直接贴代码了 控件源代码如下

  using System;        using System ComponentModel;        using System Drawing;        using System Security Permissions;        using System Web;        using System Web UI;        using System Web UI WebControls;        namespace KingWebControlToolkit                    [            AspNetHostingPermission(SecurityAction InheritanceDemand                 Level = AspNetHostingPermissionLevel Minimal)             AspNetHostingPermission(SecurityAction Demand                 Level = AspNetHostingPermissionLevel Minimal)             ToolboxData(                < :LoadingControl runat=\\ server\\ > </ :LoadingControl> )             ]            public class LoadingControl : CompositeControl                            private ITemplate contentTempalte;                private ITemplate progressTemplate;                private TemplateContainer contentContainer;                private TemplateContainer progressContainer;                [                Browsable(false)                 DesignerSerializationVisibility(                    DesignerSerializationVisibility Hidden)                ]                public TemplateContainer Owner                                    get                                            return contentContainer;                                                    [                Browsable(false)                 PersistenceMode(PersistenceMode InnerProperty)                 DefaultValue(typeof(ITemplate) )                 Description( Control template )                 TemplateContainer(typeof(LoadingControl ))                ]                public virtual ITemplate ContentTemplate                                    get                                            return contentTempalte;                                        set                                            contentTempalte = value;                                                    [                Browsable(false)                 PersistenceMode(PersistenceMode InnerProperty)                 DefaultValue(typeof(ITemplate) )                 Description( Control template )                 TemplateContainer(typeof(LoadingControl))                ]                public virtual ITemplate ProgressTemplate                                    get                                            return progressTemplate;                                        set                                            progressTemplate = value;                                                    protected override void CreateChildControls()                                    Controls Clear();                    contentContainer = new TemplateContainer();                    progressContainer = new TemplateContainer();                    contentContainer Attributes[ onclick ] = javascript:this style display= none ;document getElementById( progress ) style display= ; ;                    contentContainer Attributes[ id ] = content ;                    progressContainer Attributes[ id ] = progress ;                    progressContainer Attributes[ style ] = display:none ;                    ITemplate temp = contentTempalte;                    if (temp == null)                                            temp = new DefaultTemplate();                                        temp InstantiateIn(contentContainer);                    temp = progressTemplate;                    temp InstantiateIn(progressContainer);                    this Controls Add(contentContainer);                    this Controls Add(progressContainer);                                        [            ToolboxItem(false)            ]            public class TemplateContainer : WebControl                                    DefaultTemplate       

cha138/Article/program/net/201311/13979

相关参考

知识大全 JS防止用户多次提交的简单代码

JS防止用户多次提交的简单代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!这篇文章介绍了JS防止

知识大全 struts利用Token防止用户重复提交

struts利用Token防止用户重复提交  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 一步步打造防止重复提交按钮

   首先说说防止重复提交按钮是啥东西   我们在访问有的网站输入表单完成以后单击提交按钮进行提交以后提交按钮就会变为灰色用户不能再单击第二

知识大全 php防止刷新页面重复提交

  作为phper我们在开发和学习php过程中难免要经常的接受处理表单数据然而处理表单的时候总会有一个问题困扰大家刷新页面重复提交的问题如何防止刷新页面重复提交呢?  其实在php学习中我们会有很多的

知识大全 解析php防止form重复提交的方法

本篇文章是对php防止form重复提交的方法进行了详细的分析介绍需要的朋友参考下   php防止表单重复提交实例复制代码代码如下:<?phpsession_start();$_SESS

用户想装管道天然气,怎么申报?

第一步:客户申请  民用户:客户提交申请,提供准确的用气地址;  公用户:客户提交申请,提供用气规模和所需供气压力等的数据;  第二步:勘测  根据客户提供的数据,燃气公司设计部门派员进行现场勘测,与

知识大全 防止ASP.NET按钮多次提交的办法

防止ASP.NET按钮多次提交的办法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  网上查了很多

知识大全 asp.net防止页面刷新或后退引起重复提交

  项目中遇到刷新后重复的向数据库增加一条相同的记录引出错误归纳得出问题是  怎样防止页面刷新或后退引起重复提交数据的问题  其实防止刷新是开发中经常遇到的问题通常有多种方法来实现(下面是一些解决方案

知识大全 ASP.NET中防止页面多次提交的代码实现

ASP.NET中防止页面多次提交的代码实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  此处提

知识大全 Struts2 国际化与防止刷新重复提交表单

Struts2国际化与防止刷新重复提交表单  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本实例