爱上MVC3系列~同步与异步提交,在过滤器里如何进行重定向
2012-12-06 23:54
204 查看
回到目录
MVC3+JQuery可以让你很方便的实现表单的异步提交,之前也读起过MVC自己的异步表单Ajax.BeginForm(),而今天主要说的是通过JQ来实现表单的提交,事实上,这在之前的文章中也详细的说过,而今天当然主角也不是它。
今天主要的问题是,在MVC的Fitler中,如何实现同步提交的Action与异步提交的Action在Filter中的URL重定向问题,举个例子,比如:
一个访客身份,它可以看一些贴子,新闻,但如果它希望回复新闻贴子的时间,则必须提示叫它去登陆,对于这个回复表单事实就是一个POST操作,而如何去提交这个POST操作就是我们说的“提交方式”,同步与异步,而要在POST方法上加个过滤器以验证用户是否登陆过,如果登陆成功,则操作继续进行,如果没有登陆,则实现URL的重定向,进入登陆页。
操作流程:
---------------------------------------------------------------------------------
用户查新闻
|
希望评论新闻
|
<是否登陆> ---N 提交用户去登陆
| Y
评论成功
----------------------------------------------------------------------------------
这个流程已经足够清晰了,现在我们去实现它吧,我不希望把这种验证逻辑写在代码里,
原因一,重复代码高
原因二,重复代码多后,使代码的可维护性降低
原因三,代码臃肿,不美观,这不符合我的“代码之美,代码艺术”的原则
原因四,使页面逻辑过于复杂
的上下文,如果希望得到当前页面的Request,Response,HttpContext,RouteData等信息,可以通过它得到。
下面给出异步POST与同步POST验证并重定向的代码:
注意,对于异步POST,在Controller里一般都是返回JsonResult或者ContentResult,所以我们必须也要返回一个Javascript的上下文,这样才能使我们的JS脚本执行,而对于同步提交,我们要返回一个HTML页面。
如果大家对JS异步与同步提交不清楚,可以参考下面代码:
感谢您的阅读!代码改变生活!
回到目录
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验证并重定向的代码:
if (userID == null || Convert.ToInt32(userID) <= 0) { if (request.IsAjaxRequest()) { filterContext.Result = new ContentResult() { Content = ajaxMsg.Replace("msg", USER_WARN).Replace("url", request.UrlReferrer.ToString()), ContentType = "text/javascript", }; } else { filterContext.RequestContext.HttpContext.Response.Clear(); filterContext.HttpContext.Response.Write(_RedirectJSString.Replace("msg", USER_WARN).Replace("url", request.UrlReferrer.ToString())); } }
注意,对于异步POST,在Controller里一般都是返回JsonResult或者ContentResult,所以我们必须也要返回一个Javascript的上下文,这样才能使我们的JS脚本执行,而对于同步提交,我们要返回一个HTML页面。
如果大家对JS异步与同步提交不清楚,可以参考下面代码:
//异步提交 $.ajax({ type: "Post", url: "/common/review", success: function (data) { alert(data.res); } }); //同步提交 $("form").submit();
感谢您的阅读!代码改变生活!
回到目录
相关文章推荐
- 爱上MVC3系列~同步与异步提交,在过滤器里如何进行重定向~续
- 爱上MVC3系列~RenderAction与RenderPartial及一个页面多个表单提交
- 爱上MVC3系列~PartialView中的页面重定向
- 如何在数据库事务提交成功后进行异步操作
- 如何在数据库事务提交成功后进行异步操作
- [翻译] ASP.NET MVC Tip #6 – 提交表单后如何进行重定向
- 如何利用formData进行异步提交上传文件
- 如何在数据库事务提交成功后进行异步操作
- 异步信号如何进行同步
- jquery validate(5) : 如何进行 ajax 提交
- Appium python自动化测试系列之等待函数如何进行实战(九)
- 如何对远程对象进行异步调用(示例代码)
- Jquery点击按钮 异步和同步提交表单
- jquery validate(5) : 如何进行 ajax 提交
- nw.js node-webkit系列(15)如何使用内部模块和第三方模块进行开发
- (爱加密系列教程十三) 如何防止工具(八门神器)进行内存修改
- .NET中如何通过文本框中按回车键进行的提交数据
- github如何修改源码并进行提交方法小结
- 一道面试题:如何防止异步请求的重复提交
- 同步异步5:任务提交中的同步异步