博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
爱上MVC3系列~同步与异步提交,在过滤器里如何进行重定向
阅读量:6814 次
发布时间:2019-06-26

本文共 2054 字,大约阅读时间需要 6 分钟。

MVC3+JQuery可以让你很方便的实现表单的异步提交,之前也读起过MVC自己的异步表单Ajax.BeginForm(),而今天主要说的是通过JQ来实现表单的提交,事实上,这在之前的文章中也详细的说过,而今天当然主角也不是它。

今天主要的问题是,在MVC的Fitler中,如何实现同步提交的Action与异步提交的Action在Filter中的URL重定向问题,举个例子,比如:

一个访客身份,它可以看一些贴子,新闻,但如果它希望回复新闻贴子的时间,则必须提示叫它去登陆,对于这个回复表单事实就是一个POST操作,而如何去提交这个POST操作就是我们说的“提交方式”,同步与异步,而要在POST方法上加个过滤器以验证用户是否登陆过,如果登陆成功,则操作继续进行,如果没有登陆,则实现URL的重定向,进入登陆页。

操作流程:

---------------------------------------------------------------------------------

用户查新闻

    |

希望评论新闻

     |

<是否登陆> ---N 提交用户去登陆

     |  Y

 评论成功

----------------------------------------------------------------------------------

这个流程已经足够清晰了,现在我们去实现它吧,我不希望把这种验证逻辑写在代码里,

原因一,重复代码高

原因二,重复代码多后,使代码的可维护性降低

原因三,代码臃肿,不美观,这不符合我的“代码之美,代码艺术”的原则

原因四,使页面逻辑过于复杂

引入过滤器

授权过滤器可以继承自AuthorizeAttribute类,我们通常去复写它的OnAuthorization方法,将要进行验证的逻辑写在方法里,而filterContext就是当然WEB请求

的上下文,如果希望得到当前页面的Request,Response,HttpContext,RouteData等信息,可以通过它得到。

下面给出异步POST与同步POST验证并重定向的代码:

1         if (userID == null || Convert.ToInt32(userID) <= 0) 2           { 3             if (request.IsAjaxRequest()) 4             { 5               filterContext.Result = new ContentResult() 6               { 7                 Content = ajaxMsg.Replace("msg", USER_WARN).Replace("url", request.UrlReferrer.ToString()), 8                 ContentType = "text/javascript", 9               };10             }11             else12             {13               filterContext.RequestContext.HttpContext.Response.Clear();14               filterContext.HttpContext.Response.Write(_RedirectJSString.Replace("msg", USER_WARN).Replace("url", request.UrlReferrer.ToString()));15              }16 17           }

注意,对于异步POST,在Controller里一般都是返回JsonResult或者ContentResult,所以我们必须也要返回一个Javascript的上下文,这样才能使我们的JS脚本执行,而对于同步提交,我们要返回一个HTML页面。

如果大家对JS异步与同步提交不清楚,可以参考下面代码:

1          //异步提交 2         $.ajax({ 3             type: "Post", 4             url: "/common/review", 5             success: function (data) { 6                 alert(data.res); 7             } 8         }); 9 10         //同步提交11         $("form").submit();

感谢您的阅读!代码改变生活!

本文转自博客园张占岭(仓储大叔)的博客,原文链接:,如需转载请自行联系原博主。

你可能感兴趣的文章
RagingWire战略重点批发数据中心服务
查看>>
数据中心的规模是否影响虚拟化DCIM的决策?
查看>>
后流量时代,世间再无电信运营商
查看>>
李开复:钉钉是大胆的突破式创新
查看>>
我国特色国情下 智慧城市建设与国外有哪些区别
查看>>
MaxCompute帮助创业公司中减轻MySQL存储压力
查看>>
ASHRAE新标准促进降低数据中心能源消耗
查看>>
程序猿如何从产品的角度去提升应用的体验之Android权限优化篇
查看>>
夏普欲收回美洲品牌授权 海信总裁:严格按照合同办
查看>>
大数据市场迎来扩容期 本土内存数据库抢位崛起
查看>>
2016年亚太地区网络广告支出预计超过北美
查看>>
智慧医疗节约救治时间,降低患者死亡率
查看>>
zephir-(2)安装和初体验
查看>>
IPython4_Notebook
查看>>
IE7/IE8不兼容js trim函数,自己实现
查看>>
Objective-C的泛型
查看>>
Mac OSX 命令行知识[转]
查看>>
在Tornado中使用Django的ORM的注意事项
查看>>
用node-webkit把web应用打包成桌面应用
查看>>
ORM数据层框架的设计热点:更新指定的列的几种设计方案
查看>>