私のウェブサイトでは、ログインする方法が 2 つあります。1 つ目は、ユーザーが [ログオン] ボタンを押すときに使用され、jQuery UI ダイアログが開くようにトリガーします。2 つ目は通常のビューで、ユーザーが承認されていない場合に使用され、通常のログイン ビューにリダイレクトされます。しかし、代わりに私がやりたかったのは、ユーザーが承認されていない場合、ユーザーが意図したビューへのリダイレクトではなく、Login 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" }));
}
最後の手段は、ロード時にダイアログを開く白い背景だけで、アクセスが拒否されたページにリダイレクトすることです。