按钮

防止表单重复提交的几种策略

筅森魡賤 提交于 2020-02-27 06:37:42
表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题,比如: 点击提交按钮两次。 点击刷新按钮。 使用浏览器后退按钮重复之前的操作,导致重复提交表单。 使用浏览器历史记录重复提交表单。 浏览器重复的HTTP请求。 几种防止表单重复提交的方法 禁掉提交按钮。 表单提交后使用Javascript使提交按钮 disable 。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了。 我之前的文章曾说过用一些Jquery插件效果不错。 Post/Redirect/Get模式。 在提交后执行页面重定向,这就是所谓的 Post-Redirect-Get (PRG)模式 。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。 这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。 在session中存放一个特殊标志。 当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从session中删除它,然后正常处理数据。 如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。

防止表单重复提交的几种策略

落爺英雄遲暮 提交于 2020-02-27 06:37:05
表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题,比如: 点击提交按钮两次。 点击刷新按钮。 使用浏览器后退按钮重复之前的操作,导致重复提交表单。 使用浏览器历史记录重复提交表单。 浏览器重复的HTTP请求。 几种防止表单重复提交的方法 禁掉提交按钮。 表单提交后使用Javascript使提交按钮 disable 。这种方法防止心急的用户多次点击按钮。但有个问题,如果客户端把Javascript给禁止掉,这种方法就无效了。 我之前的文章曾说过用一些Jquery插件效果不错。 Post/Redirect/Get模式。 在提交后执行页面重定向,这就是所谓的 Post-Redirect-Get (PRG)模式 。简言之,当用户提交了表单后,你去执行一个客户端的重定向,转到提交成功信息页面。 这能避免用户按F5导致的重复提交,而其也不会出现浏览器表单重复提交的警告,也能消除按浏览器前进和后退按导致的同样问题。 在session中存放一个特殊标志。 当表单页面被请求时,生成一个特殊的字符标志串,存在session中,同时放在表单的隐藏域里。接受处理表单数据时,检查标识字串是否存在,并立即从session中删除它,然后正常处理数据。 如果发现表单提交里没有有效的标志串,这说明表单已经被提交过了,忽略这次提交。

Coolite Toolkit学习笔记二:服务器端Alert,Confirm,Prompt

邮差的信 提交于 2020-02-27 04:14:39
一:Alert Alert组件最简单的用法就是直接弹出一个消息提示框: protected void Button_Click( object sender, AjaxEventArgs e) { Ext.Msg.Alert( " 标题内容 " , " 消息内容 " ).Show(); } 如果我们需要在弹出的提示框点了“确定”以后要执行其他操作怎么办呢?这时候可以使用Alert方法的重载方法,通过JFunction指定一个客户端方法,点了“确定”后就指定相应的客户端JavaScript方法,使用如下: protected void Button_Click( object sender, AjaxEventArgs e) { Ext.Msg.Alert( " 标题内容 " , " 消息内容 " , new JFunction { Fn = " JsMethod " }).Show(); } < ext:Button ID ="Button1" runat ="server" Text ="Submit" > < AjaxEvents > < Click OnEvent ="Button_Click" ></ Click > </ AjaxEvents > </ ext:Button > < script type ="text/javascript" > function

VS code简单应用——day03

烂漫一生 提交于 2020-02-27 03:51:48
一、音频 (1)应用格式: <audio src=“音频地址” controls autoplay loop></audio> (2)属性: controls属代表控制条,布尔属性 loop属性代表是否循环播放,布尔属性 moted属性代表是否静音播放,布尔属性 autoplay属性代表是否自动播放,布尔属性 二、视频 (1)应用格式: <video src=“视频地址” controls autoplay loop></video> (2)属性: controls属代表控制条,布尔属性 loop属性代表是否循环播放,布尔属性 moted属性代表是否静音播放,布尔属性 autoplay属性代表是否自动播放,布尔属性 三、表单-1 1.登录界面应用格式: (type=“text” 、type=“password”) <body> <h3>登录表单</h3> <form action= "#" method= "GET" > 用户名:<input type= "text" name= "username" placeholder= "手机号/邮箱/名称" ><br> 密码:<input type= "password" name= "password" placeholder= "请输入密码" ><br> <input type= "submit" value= "登录" > <

文件上传的几个 - 示例

偶尔善良 提交于 2020-02-27 03:39:13
本篇将要和朋友们分享的是几个上传文件的例子和逻辑步奏及自定义个简单的js上传插件我取名为 shenniu.upfile-0.0.1.js ;近来在讨论组中很有几个朋友咨询上传文件的代码和怎么下载上传的文件,所以写了此篇文章,希望能为朋友们解答一些疑惑或能带来帮助,也谢谢各位多多支持点赞。 以上是个人的看法,下面来正式分享今天的文章吧: . 使用iis发布保存上传文件的文件夹 . 示例A - 普通表单上传文件,Request.Files获取上传文件 . 示例B - 普通表单上传文件,HttpPostedFileBase获取上传文件 . 示例C - ajax+FormData上传文件,Request.Files获取上传文件 . 示例D - 自定义上传插件,Request.Files获取上传文件并提交表单内容 下面一步一个脚印的来分享: . 使用iis发布保存上传文件的文件夹 首先,因为我们上传文件后,需要查看或者下载这个文件,通常分为两种形式;一种把上传的文件上传到程序的根目录中的某个文件夹中,这种就可以直接通过站点的虚拟路径来访问,这种其实也是使用了iis发布的;第二种是通过程序上传到服务器的某个磁盘中,这种路径通常就不在上传程序站点的目录下,因为想让用户通过其他的url地址访问下载文件,iis发布只是其中一种;其实用iss发布保存上传文件的文件夹和发布程序一样差不多;

.NetCore上传多文件的几种示例

大憨熊 提交于 2020-02-27 03:37:59
本章和大家分享的是.NetCore的MVC框架上传文件的示例,主要讲的内容有:form方式提交上传,ajax上传, ajax提交+上传进度效果 , Task并行处理+ajax提交+上传进度 form方式上传一组图片 上传文件必须要设置form元素里面的 enctype= " multipart/form-data " 属性和post方式,如果你想要多选上传文件的话,需要把文件type='file'元素设置她的属性multiple='multiple',内容: 1 2 3 4 5 6 7 8 < form class = "form-horizontal" action = "/Home/FileUp" method = "post" enctype = "multipart/form-data" > < input type = "file" name = "MyPhoto" class = "form-control" multiple /> < br /> < button class = "btn btn-default" >form上传</ button > < br /> < span style = "color:red" >@ViewData["MsgBox"]</ span > </ form > 由于采用form提交

H-ui前端框架

给你一囗甜甜゛ 提交于 2020-02-27 03:31:47
按钮 不支持圆角和背景渐变浏览器,如IE系列,会显示扁平纯色直角效果。 HTML代码 <input class="btn btn-default" type="button" value="默认"> <input class="btn btn-default radius" type="button" value="圆角效果"> <input class="btn btn-default round" type="button" value="椭圆效果"> <input class="btn btn-primary radius" type="button" value="主要"> <input class="btn radius btn-secondary" type="button" value="次要"> <input class="btn btn-success radius" type="button" value="成功"> <input class="btn radius btn-warning" type="button" value="警告"> <input class="btn btn-danger radius" type="button" value="危险"> <input class="btn btn-link radius" type="button"

Vue使用clipboard复制url

最后都变了- 提交于 2020-02-26 22:14:40
Vue使用clipboard复制url clipboard是一个轻量级的框架,不依赖flash, 不依赖其他框架,实现了纯JavaScript的浏览器内容复制到系统剪贴板的功能。 1.安装cliboard npm install clipboard -- save 2.引入vue项目并注入 import clipboard from 'clipboard' Vue.prototype.ClipboardJS = clipboard; 3.button按钮 < Button @click = " share() " id = " copyUrl " data-clipboard-action = " copy " > < Icon type = " md-share-alt " /> 分享 </ Button > 4.事件调用 share ( ) { var _val = window . location . href ; new this . ClipboardJS ( '#copyUrl' , { text : function ( ) { return _val ; } } ) ; } 这里CliboardJS第一个参数是选择器( DOM选择器, HTML 元素, 或者 HTML元素列表.),第二个参数是返回的文本。 来源: CSDN 作者: 流光之中 链接: https:/

MFC&C++&Opencv入门学习笔记

怎甘沉沦 提交于 2020-02-26 15:53:41
MFC&C++&Opencv入门学习笔记(一) 本文为本人第一次学习编辑并发表博客,若有任何问题请各位看官老爷及时指出! 本文主要内容:在vs2019中,创建MFC模式项目,并在其中加入opencv,配置好相关环境。 首先,对MFC有一个基本的认识: 百度百科上是这样介绍的: “微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。” 通俗来讲,MFC就是一种可以通过拖动控件创建界面元素的程序框架;比如在此之前,你可能只编写过在控制台上显示的C语言代码,这种程序和我们用的手机上的App没有什么联系,会让你感到很无趣,但是mfc可以很轻松地创建界面,有了一定的交互性,这让编程更加有趣味性。 不过,mfc已经是相当古老的东西了,放在今天可能会有些落后,但是其他框架也都是相似的,可以先通过学习MFC了解一下。 打开vs2019,创建MFC项目如下: 选择上图中左侧的MFC项目,如下: 为你新建的MFC项目取一个名字后选择创建; 在应用程序类型中,我们选择 基于对话框 的应用程序类型,如下: 创建后

活跃用户数量偏少?让我们从代码上分析一下原因!

做~自己de王妃 提交于 2020-02-26 15:09:26
最近有网友发现友盟的数据统计里面,活跃用户的数量有点不大对劲,跟启动次数相比,严重偏少。sdk的使用方式没啥好说的,就那么简单几步,应该不会是sdk设置的问题。于是就从友盟关于活跃用户的定义开始,着手分析这个问题。 活跃用户的定义:打开应用的用户即为活跃用户,不考虑用户的使用情况。 从上面的文章,了解到Umeng里面对用户的定义:友盟将一个独立的设备视为一个用户,然而每个独立的用户是通过UMID来进行唯一标识的。然而UMID又是神马鬼东西?简单来说就是友盟会在第一次安装的时候生成一个UMID,当ID生成以后友盟会尽量保证这个UMID不会发生变化。 在应用对应的存储目录下面,我们可以找到这个UMID的身影: ngeIdentity.json这个文件来说,cat一下里面的内容,应该可以看到: 笔者发现公司里多台设备的UMID都居然是一个相同的UMID值,WTF!!!也同样是上面这串神秘的代码:528c8e6cd4a3c6598999a0e9df15ad32。 这个时候就需要查一下UMID的生成方式了,从上面那篇UMID方案解析的文章中,可以了解到Android系统中与UMID相关的几个ID:imei、mac地址、android_id。有了这些关键点,我们就可以开始去反编译友盟的sdk包并进行下一步的搜索了(这里反编译了友盟最新的jar包:umeng-analytics-v6.0.1