中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

愛(ai)上MVC3系列~同步與(yu)異步提交,在過濾器里如何(he)進行(xing)重(zhong)定向~續

回到目錄

上一篇文章已經解決了同步與(yu)異步表單提交的(de)(de)頁面重(zhong)定(ding)向問題,而為(wei)什么要(yao)寫個(ge)“續”呢,原(yuan)因是,我覺得上(shang)次的(de)(de)代(dai)碼不夠美(mei)麗,而且(qie)有(you)些啰嗦,也不符合我的(de)(de)代(dai)碼之美(mei)原(yuan)則,所以,我自己(ji)的(de)(de)代(dai)碼進(jin)行了一次重(zhong)構:

兩件事:

同步表單,返回(hui)view或者partialview時,事(shi)實上返回(hui)的是一個text/html格(ge)式(shi)的視圖

異步(bu)表單,返回Json,text,xml,javascript時,事實(shi)上返回的(de)是一個(ge)text/javascript格(ge)式的(de)視圖(tu)

有了上面(mian)的基礎,我們把代碼重構一下(xia)吧(ba):

 1     /// <summary>
 2     /// 角色過濾器(qi)
 3     /// </summary>
 4     public class RoleFilter : AuthorizeAttribute
 5     {
 6         const string USER_WARN = "您必須先登陸才(cai)能執行本操作";
 7         const string WORKSHOPUSER_WARN = "必須是本工(gong)作室的(de)用戶(hu)才能執行本操作";
 8         const string WORKSHOPTEACHER_WARN = "必須是本(ben)工作室的老(lao)師才能執行本(ben)操作";
 9         RoleFlag _RoleFlag;
10         /// <summary>
11         /// 角色(se)過濾(lv)器構造依(yi)法(fa)
12         /// </summary>
13         /// <param name="roleFlag">角(jiao)色類型</param>
14         public RoleFilter(RoleFlag roleFlag)
15         {
16             _RoleFlag = roleFlag;
17         }
18         public override void OnAuthorization(AuthorizationContext filterContext)
19         {
20             var userID = filterContext.RequestContext.HttpContext.Session["UserID"];
21             var request = filterContext.RequestContext.HttpContext.Request;
22             var routeData = filterContext.RequestContext.RouteData.Values["id"];
23             //同(tong)步方式
24             string htmlMsg = @"<html><head><title></title></head><body>
25                                <link href='/Scripts/jquery-plugin-boxy/css/boxy.css' rel='stylesheet' type='text/css' /> 
26                                <script src='/Scripts/jquery-1.4.4.min.js' type='text/javascript'></script>
27                                <script src='/Scripts/jquery-plugin-boxy/js/jquery.boxy.js' type='text/javascript'></script>
28                                <script src='/Scripts/jquery-plugin-boxy/jBoxyFun.js' type='text/javascript'></script>
29                               <script type='text/javascript'>
30                                 $(function(){
31                                  alertHrefFun('msg','url');});</script></body></html>";
32             //異(yi)步(bu)方式
33             string jsMsg = @"alertHrefFun('msg','url');";
34 
35             switch (this._RoleFlag)
36             {
37                 case RoleFlag.User:
38                     if (userID == null || Convert.ToInt32(userID) <= 0)
39                     {
40                         var result = new ContentResult
41                         {
42                             Content = htmlMsg.Replace("msg", USER_WARN).Replace("url", request.UrlReferrer.ToString()),
43                             ContentType = "text/html",
44                         };
45                         if (request.IsAjaxRequest())
46                         {
47                             result.Content = jsMsg.Replace("msg", USER_WARN).Replace("url", request.UrlReferrer.ToString());
48                             result.ContentType = "text/javascript";
49                         }
50                         filterContext.Result = result;
51                     }
52 
53                     break;
54                 default:
55                     break;
56             }
57         }
58     }

如果我們覺得代碼還是顯示有點不完善,我們可以把構建ContentResult對(dui)象的語句提取到(dao)一(yi)個方法(fa)上,把常量提升(sheng)到(dao)類級別上,看修改后的代碼:

 1     /// <summary>
 2     /// 角色過濾(lv)器
 3     /// </summary>
 4     public class RoleFilter : AuthorizeAttribute
 5     {
 6         #region Constructs
 7         /// <summary>
 8         /// 角色過(guo)濾器構造依法(fa)
 9         /// </summary>
10         /// <param name="roleFlag">角(jiao)色類型</param>
11         public RoleFilter(RoleFlag roleFlag)
12         {
13             _RoleFlag = roleFlag;
14         }
15         #endregion
16 
17         #region Consts
18         /// <summary>
19         /// 必須(xu)登陸警(jing)告(gao)
20         /// </summary>
21         const string USER_WARN = "您必(bi)須先登陸才能執行本操(cao)作";
22         /// <summary>
23         /// 必須(xu)是(shi)工(gong)作室成員警告
24         /// </summary>
25         const string WORKSHOPUSER_WARN = "必須是本工作室的用戶(hu)才能(neng)執行本操作";
26         /// <summary>
27         /// 必須(xu)是工作室老師警告(gao)
28         /// </summary>
29         const string WORKSHOPTEACHER_WARN = "必須是本(ben)工作(zuo)(zuo)室(shi)的老(lao)師才能執行本(ben)操作(zuo)(zuo)";
30         #endregion
31 
32         #region Fields
33         /// <summary>
34         /// 同步方(fang)式(shi)
35         /// </summary>
36         string htmlMsg = @"<html><head><title></title></head><body>
37                                <link href='/Scripts/jquery-plugin-boxy/css/boxy.css' rel='stylesheet' type='text/css' /> 
38                                <script src='/Scripts/jquery-1.4.4.min.js' type='text/javascript'></script>
39                                <script src='/Scripts/jquery-plugin-boxy/js/jquery.boxy.js' type='text/javascript'></script&gt;
40                                <script src='/Scripts/jquery-plugin-boxy/jBoxyFun.js' type='text/javascript'></script>
41                               <script type='text/javascript'>
42                                 $(function(){
43                                  alertHrefFun('msg','url');});</script></body>&lt;/html>";
44         /// <summary>
45         /// 異(yi)步方式
46         /// </summary>
47         string jsMsg = @"alertHrefFun('msg','url');";
48 
49         RoleFlag _RoleFlag;
50         #endregion
51 
52         /// <summary>
53         /// 根(gen)據請(qing)求上(shang)下(xia)文類型,返回對(dui)象(xiang)
54         /// </summary>
55         /// <param name="request"></param>
56         /// <param name="jsMsg"></param>
57         /// <param name="htmlMsg"></param>
58         /// <returns></returns>
59         ActionResult GetContentResult(HttpRequestBase request, string Warn)
60         {
61             var result = new ContentResult
62             {
63                 Content = htmlMsg.Replace("msg", Warn).Replace("url", request.UrlReferrer.ToString()),
64                 ContentType = "text/html",
65             };
66             if (request.IsAjaxRequest())
67             {
68                 result.Content = jsMsg.Replace("msg", Warn).Replace("url", request.UrlReferrer.ToString());
69                 result.ContentType = "text/javascript";
70             }
71             return result;
72         }
73 
74         public override void OnAuthorization(AuthorizationContext filterContext)
75         {
76             var userID = filterContext.RequestContext.HttpContext.Session["UserID"];
77             var request = filterContext.RequestContext.HttpContext.Request;
78             var routeData = filterContext.RequestContext.RouteData.Values["id"];
79             switch (this._RoleFlag)
80             {
81                 case RoleFlag.User:
82                     if (userID == null || Convert.ToInt32(userID) <= 0)
83                     {
84                         filterContext.Result = GetContentResult(request, USER_WARN);
85                     }
86 
87                     break;
88                 default:
89                     break;
90             }
91         }
92     }

 

值得注意的(de)(de)是:如果是返(fan)回text/html頁(ye)面(mian),然原(yuan)來的(de)(de)視圖將被覆蓋,所以你(ni)的(de)(de)JS文(wen)(wen)件(jian)與(yu)CSS文(wen)(wen)件(jian)需要重新(xin)被引用才(cai)行,但如果是返(fan)回text/javascript對象,則它會使用原(yuan)頁(ye)面(mian)的(de)(de)腳本文(wen)(wen)件(jian)與(yu)樣式文(wen)(wen)件(jian),這一點要清(qing)楚(chu)。

 回到目錄

posted @ 2012-12-07 16:13  張占嶺  閱讀(1956)  評論(2)    收藏  舉報