知识大全 防止用户反复提交
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防止用户多次提交的简单代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!这篇文章介绍了JS防止
struts利用Token防止用户重复提交 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 
首先说说防止重复提交按钮是啥东西 我们在访问有的网站输入表单完成以后单击提交按钮进行提交以后提交按钮就会变为灰色用户不能再单击第二
作为phper我们在开发和学习php过程中难免要经常的接受处理表单数据然而处理表单的时候总会有一个问题困扰大家刷新页面重复提交的问题如何防止刷新页面重复提交呢? 其实在php学习中我们会有很多的
本篇文章是对php防止form重复提交的方法进行了详细的分析介绍需要的朋友参考下 php防止表单重复提交实例复制代码代码如下:<?phpsession_start();$_SESS
第一步:客户申请 民用户:客户提交申请,提供准确的用气地址; 公用户:客户提交申请,提供用气规模和所需供气压力等的数据; 第二步:勘测 根据客户提供的数据,燃气公司设计部门派员进行现场勘测,与
防止ASP.NET按钮多次提交的办法 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 网上查了很多
项目中遇到刷新后重复的向数据库增加一条相同的记录引出错误归纳得出问题是 怎样防止页面刷新或后退引起重复提交数据的问题 其实防止刷新是开发中经常遇到的问题通常有多种方法来实现(下面是一些解决方案
ASP.NET中防止页面多次提交的代码实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 此处提
Struts2国际化与防止刷新重复提交表单 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本实例