使用的是 mvc中model验证
按钮提交,先验证,验证通过然后提交给服务器,但是这样会造成重复提交的漏洞,我打算在页面上,当验证通过后给当前的按钮设置为不可用,该怎么办?
求指导..
public class PlatformActionFilter : FilterAttribute, IActionFilter { public PlatformActionFilter() { } string hiddenToken = "hiddenToken"; public void OnActionExecuting(ActionExecutingContext filterContext) { string httpMethod = filterContext.RequestContext.HttpContext.Server.HtmlEncode(filterContext.RequestContext.HttpContext.Request.HttpMethod); if (httpMethod == "POST") { // page token // hiddenToken string cacheToken = filterContext.HttpContext.Request[hiddenToken]; //filterContext.HttpContext.Request.IsAjaxRequest() if (cacheToken != null) { if (System.Web.HttpContext.Current.Cache[cacheToken] == null) { System.Web.HttpContext.Current.Cache.Insert(cacheToken, cacheToken, null, DateTime.MaxValue, TimeSpan.FromSeconds(1)); LogHeper.Instant.log.Info("提交成功!"); } else { LogHeper.Instant.log.Info(filterContext.HttpContext.Request.Url + "请不要重复提交!"); throw (new GLRISCRMException("请不要重复提交!")); } } } } public void OnActionExecuted(ActionExecutedContext filterContext) { } }
@Html.Hidden("hiddenToken", new Guid().ToString() + DateTime.Now.Ticks)
重定向/禁止提交按钮 等以前对 asp.net webform 的都适用
FYI
http://www.cnblogs.com/wintersun/archive/2012/03/10/2389084.html
这个帖子我看了,添加的东西太多了,我想简单点。
@亮亮7550:
$.ajax({ type: "post", url: ..., data:.., success: function (json) { window.location.href = ...; } });
那就只能用这了
用jquery对按钮事件只绑定一次
能举个简单例子吗?
@亮亮7550: http://api.jquery.com/one/这里
不关MVC的事,是你的业务事务没管理好。
你会哪种防止重复提交的方法都可以用
首先你要明白,重复提交表单和mvc没有关系。是你的业务逻辑代码控制着他。你最好描述清楚!
1、禁用按钮
2、设置标识
3、使用延时,第二次请求在一定时限内释放第一次请求
禁用后就不请求了啊!一次都点击不了。
@亮亮7550: 点击一次之后,禁用按钮...呵呵~
@幻天芒: 你说的是用 js事件吗?
@亮亮7550: 是哇。
jiebang
验证后 禁用按钮
使用token验证 (令牌)
点击提交时,按钮隐藏