在我的网站上,我有两种登录方式。第一个用于然后用户按下登录按钮,这会触发一个 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" }));
}
最后的手段是重定向到一个只有白色背景的拒绝访问页面,加载时打开一个对话框。