日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

mvc3中正确处理ajax访问需要登录的页面

發布時間:2025/1/21 c/c++ 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mvc3中正确处理ajax访问需要登录的页面 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mvc3中有Ajax.ActionLink和Ajax.BeginForm兩個方法用來生成ajax的連接和ajax的表單提交。

但是當要訪問的連接是一個需要登錄的頁面,顯示時就不太友好了

我簡單模擬了一下來說明這個問題

頁面中有3個連接,第一個是退出登錄,第二是普通連接方式顯示一個需要登錄的頁面,第三個是ajax方式,頁面的內容將會在下面顯示

@Ajax.ActionLink("ajax show a page need login", "needlogin", new AjaxOptions { UpdateTargetId="container" }) <div id="container"></div>

在未登錄的情況下,點擊普通方式的連接,跳轉到

登錄頁

點擊ajax方式,并不是調轉到登陸頁去登陸,而是登陸頁在下面顯示了

當你的登錄頁是一個比較復雜的頁面時,他整個加到了container div中,這就很惡心了

?

ajax連接,希望整個頁面跳轉,只能用javascript來跳轉了

為此,我們需要寫一個自己的驗證filter

?

public class MyAuthAttribute : AuthorizeAttribute{protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext){if (filterContext.HttpContext.Request.IsAjaxRequest()){filterContext.Result = new AjaxUnauthorizedResult();return;}base.HandleUnauthorizedRequest(filterContext);}}

其中AjaxUnauthorizedResult是自己定義的類

public class AjaxUnauthorizedResult : JavaScriptResult{public AjaxUnauthorizedResult(){var loginurl = FormsAuthentication.LoginUrl;this.Script = "location.href='" + loginurl + "'";}}

他繼承了JavaScriptResult類,用于返回

使用了自己定義的filter之后效果如下

注意瀏覽器并沒有后退按鈕,說明他是js調轉的

登陸后點擊則正常顯示,在下面讀取了頁面的內容并顯示

?

觀察普通連接的未登錄調轉和ajax的未登錄跳轉我們發現,普通的登錄的會多一個參數 ReturnUrl 通過這個參數,我們可以在登錄時返回到之前的頁面

但對于ajax連接來說,我們不應該返回被請求的/home/needlogin頁,而是應該返回調用此頁的主頁面/home/index頁。

如何獲取到這個頁面呢

?

查看ajax發起的請求,發現,他在地址上加了X-Requested-With參數,以說明此請求是一個ajax請求,說以在代碼中才能用Request.IsAjaxRequest()來判斷,我們可以仿照此處來加上發起ajax請求的主頁面地址

找到 jquery.unobtrusive-ajax.js 101行

options.data.push({ name: "X-Requested-With", value: "XMLHttpRequest" });

在下面加一句

options.data.push({ name: "X-Requested-From", value: location.href });

再來看發起的ajax請求,就通過參數附帶了當前頁面地址信息

如此,我們可以在程序中獲取此參數然后構造ResultUrl 參數信息了

?

注意當使用Ajax.BeginForm時,此參數是post過去的,而Ajax.ActionLink則是get傳遞

轉載于:https://www.cnblogs.com/czcz1024/archive/2012/01/16/2323458.html

總結

以上是生活随笔為你收集整理的mvc3中正确处理ajax访问需要登录的页面的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。