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

感謝您的閱讀!代碼改變生活!

回到目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM