0

私のウェブサイトでは、ログインする方法が 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" }));
    }

最後の手段は、ロード時にダイアログを開く白い背景だけで、アクセスが拒否されたページにリダイレクトすることです。

4

3 に答える 3

1

あなたが説明したものと同様の機能を採用するMVCイントラネットソリューションがありますが、フォームではなく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」が存在する場合はユーザー名に設定します。

于 2013-02-07T15:01:48.377 に答える
0

この例を見てください:

注意してくださいautoOpen: false

于 2013-02-07T14:57:17.737 に答える
0

私はasp.netに慣れていないので、実際の実装を手伝うことはできません. 1 つのアプローチは、リクエストの送信元を確認し、ユーザーが承認されていない場合は、そのページにリダイレクトしてダイアログを表示することです。

もう 1 つの方法は、ページの読み込み時にユーザーが認証されているかどうかを確認し、認証が必要なリンクをオーバーライドすることです。

$(".authRequired").on("click", function (e) {
e.preventDefault();
      //fancy logic here to load form and dialog
 });
于 2013-02-07T15:06:11.403 に答える