zoukankan      html  css  js  c++  java
  • 爱上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();

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

    回到目录

  • 相关阅读:
    linux学习25 运维加薪技能-Linux特殊权限及facl扩展
    linux学习24 Linux运维必备技能-文件查找命令企业级应用
    linux学习23 Linux运维必备技能-vim编辑器高效用法进阶
    linux学习22 Linux运维必备技能-vim编辑器深入讲解
    linux学习21 运维核心节能-egrep进阶及文本处理工具应用
    linux学习20 运维核心技能-grep命令与基本正则表达式
    【Hadoop离线基础总结】关键路径转化率分析(漏斗模型)
    【Hadoop离线基础总结】Hive级联求和
    【Hadoop离线基础总结】hive的窗口函数
    【Hadoop离线基础总结】网站流量日志数据分析系统
  • 原文地址:https://www.cnblogs.com/lori/p/2806395.html
Copyright © 2011-2022 走看看