爱上MVC3多级~同步与异步提交,在过滤器里什么举办重定向

重临目录

Ajax,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             else
12             {
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();

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

回来目录

相关文章