2013-02-07 20 views
0

在我的網站上,我有兩種登錄方式。第一個被使用,然後用戶推動登錄按鈕,這觸發了jQuery UI對話框的打開。第二種是普通視圖,如果用戶未被授權,則使用該視圖,該用戶重定向到正常的登錄視圖。但是我喜歡做的是,如果用戶沒有授權,它會打開登錄jQuery UI對話框,而不是重定向到用戶所期望的視圖。如果用戶未授權,觸發jQuery UI對話框

這就是我目前正在打開的對話框中,

$(".openLoginDialog").on("click", function (e) { 
    e.preventDefault(); 
    $("<div></div>") 
     .addClass("dialog") 
     .attr("id", $(this).attr("data-dialog-id")) 
     .appendTo("body") 
     .dialog({ 
     title: $(this).attr("data-dialog-title"), 
     create: function (event, ui) {}, 
     close: function() { $(this).remove() }, 
     open: function (event, ui) {}, 
     modal: true, 
     position: ['center', 130], 
     minWidth: 510, 
     resizable: true, 
     zIndex: 20000 
     }) 
     .load(this.href); 
    }); 

由於該對話框中的內容是partialView,它被稱爲是這樣的:

<div class="items iconlogin highligth-br"><a class="openLoginDialog" data-dialog-id="LoginDialog" data-dialog-title="Login" href="@Url.Action("LogOn", "Authentication", new { returnUrl = Request.Url.ToString() })">Login</a></div> 

還幫我控制不授權,我已覆蓋此調用。

public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     filterContext.Result = new RedirectToRouteResult(new 
      RouteValueDictionary(new { controller = "Authentication", action = "AccessDenied" })); 
    } 

最後的手段是重定向到訪問被拒絕的頁面,只有一個白色的背景,在加載時打開一個對話框。

回答

1

我有采用類似於你描述什麼功能的MVC Intranet解決方案,但它是使用Windows身份驗證不形式。

基本上我有在指數這樣的事情...

var userExists = "@ViewBag.User"; 
// require the user to register if they are not found 
if (userExists == "") { 
    $.get('Home/Register/', function (data) { 
     $("#Register").html(data); 
     $("#Register").dialog({ 
      resizable: false, 
      closeOnEscape: false, 
      dialogClass: 'no-close', 
      typeDelay: 250 
     }); 
    }); 
} 

然後在控制器我只設置「ViewBag.User」的用戶名,如果它們存在。

0

我不熟悉asp.net,所以我不能幫助實際執行。一種方法是檢查請求來自何處,如果用戶未被授權,則將其重定向回該頁面,並用對話框將其打開。

另一種方法是知道的,如果用戶在頁面加載認證和覆蓋要求認證的鏈接

$(".authRequired").on("click", function (e) { 
e.preventDefault(); 
     //fancy logic here to load form and dialog 
});