Ajax易上MVC3密密麻麻~同步和异步提交,在过滤器里什么进展重定向

返回目录

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();

感谢你的阅读!代码改变在!

回到目录

相关文章