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

愛上MVC3系列~同步與(yu)異步提交,在過濾(lv)器里(li)如何進(jin)行重定(ding)向

回到目錄

MVC3+JQuery可以讓你(ni)很方便的實(shi)(shi)現表單的異步提(ti)交,之前也讀起過MVC自己的異步表單Ajax.BeginForm(),而(er)今天主(zhu)要說的是通過JQ來實(shi)(shi)現表單的提(ti)交,事實(shi)(shi)上,這在之前的文章中也詳細的說過,而(er)今天當然主(zhu)角也不(bu)是它。

今天主要的(de)問題是,在MVC的(de)Fitler中,如何實現同(tong)步提交的(de)Action與異步提交的(de)Action在Filter中的(de)URL重(zhong)定向問題,舉個(ge)例(li)子(zi),比如:

一(yi)個(ge)(ge)訪客身份,它可以(yi)看一(yi)些(xie)貼子,新聞(wen),但如(ru)果它希(xi)望回復新聞(wen)貼子的時間,則必須提示叫它去(qu)登(deng)陸(lu)(lu),對于這個(ge)(ge)回復表單事實就(jiu)是一(yi)個(ge)(ge)POST操作,而如(ru)何去(qu)提交這個(ge)(ge)POST操作就(jiu)是我們說的“提交方(fang)式”,同步與異(yi)步,而要在POST方(fang)法上加個(ge)(ge)過(guo)濾器以(yi)驗證用戶是否登(deng)陸(lu)(lu)過(guo),如(ru)果登(deng)陸(lu)(lu)成功(gong),則操作繼(ji)續進行,如(ru)果沒有登(deng)陸(lu)(lu),則實現(xian)URL的重定(ding)向,進入登(deng)陸(lu)(lu)頁。

操作流程:

---------------------------------------------------------------------------------

用戶查新聞

    |

希望評論新聞

     |

<;是否登(deng)陸(lu)> ---N 提交用(yong)戶去(qu)登(deng)陸(lu)

     |  Y

 評論成(cheng)功

----------------------------------------------------------------------------------

這(zhe)個(ge)流程已經足(zu)夠(gou)清晰了(le),現在我們(men)去實現它吧(ba),我不希望把這(zhe)種驗證邏(luo)輯(ji)寫在代(dai)碼里,

原因一,重復代碼高

原(yuan)因二,重復代碼多(duo)后(hou),使代碼的可維護性(xing)降(jiang)低

原因三(san),代(dai)碼(ma)臃(yong)腫,不(bu)美觀,這(zhe)不(bu)符合我的“代(dai)碼(ma)之美,代(dai)碼(ma)藝術”的原則(ze)

原因四(si),使頁(ye)面邏輯(ji)過(guo)于(yu)復雜(za)

引入過濾器

授權過濾器可以(yi)繼承自AuthorizeAttribute類,我們通(tong)常去復寫(xie)它的(de)(de)OnAuthorization方(fang)法(fa),將要進行(xing)驗證的(de)(de)邏輯寫(xie)在(zai)方(fang)法(fa)里,而filterContext就(jiu)是當(dang)然WEB請(qing)求

的上下(xia)文,如果希望得到(dao)(dao)當前頁面(mian)的Request,Response,HttpContext,RouteData等信息,可以(yi)通過(guo)它得到(dao)(dao)。

下面給出異步(bu)POST與同步(bu)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           }

注意,對于異(yi)步POST,在Controller里一般都(dou)是(shi)返回JsonResult或者(zhe)ContentResult,所(suo)以我(wo)們必須也要返回一個Javascript的(de)上下文,這樣才能(neng)使我(wo)們的(de)JS腳本執行,而(er)對于同步提(ti)交,我(wo)們要返回一個HTML頁面。

如果(guo)大家對JS異步(bu)與同步(bu)提(ti)交不(bu)清楚(chu),可(ke)以參(can)考下面代碼:

 1          //異步(bu)提交
 2         $.ajax({
 3             type: "Post",
 4             url: "/common/review",
 5             success: function (data) {
 6                 alert(data.res);
 7             }
 8         });
 9 
10         //同步提(ti)交
11         $("form").submit();

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

回到目錄

posted @ 2012-12-06 23:54  張占嶺  閱讀(2882)  評論(3)    收藏  舉報