3

私はこのリンクを持っています

@Ajax.ActionLink("comment", "CreateDebateComment", new { id = Model.DebateID}, new AjaxOptions
{
    UpdateTargetId = "comment-entry-box",
    InsertionMode = InsertionMode.Replace,
    HttpMethod = "GET"
});

このコントローラーをトリガーするもの

  [Authorize]
    public PartialViewResult CreateDebateComment(int id)
    {


            DebateIDForComment = id;
            return PartialView("_CreateDebateCommentPartial");

    }

ユーザーがログインしていない場合、ログオン ページにリダイレクトされますが、ログイン ページにリダイレクトされるのではなく、コメント入力ボックスの div に読み込まれます。

このバリエーションも試してみました

 public PartialViewResult CreateDebateComment(int id)
    {
        if (!User.Identity.IsAuthenticated)
        {
            RedirectToAction("LogOn", "Account");
        }

            DebateIDForComment = id;
            return PartialView("_CreateDebateCommentPartial");

    }

ただし、リダイレクトせず、まだ partialView をロードします

これを希望どおりに機能させる方法を知っている人はいますか? コメント入力ボックスではなく、通常どおりロードするログオン ページが必要です。

4

2 に答える 2

1

[Authorize]を使用する代わりに(私が理解しているのは質問です)、コード(eg !User.Identity.IsAuthenticated)で承認を確認し、応答をjsonでラップするとfalse、クライアント側のaが[javascriptを介して]ログインにリダイレクトします。

True表示したいデータが続きます

すなわち

{ "Success": "false" }

また

{ "Success": "true", "data": "blah blah blah" }
于 2012-04-09T03:16:15.493 に答える
1

次のブログ投稿を参照してください。Phil Haack が、リクエストが AJAX リクエストであった場合にフォーム認証モジュールがログオン ページにリダイレクトするのを抑制し、401 HTTP ステータス コードを返す方法を説明しています。クライアントとそれに応じてリダイレクトします。

したがって、彼が示した HttpModule を追加するか、彼の NuGet パッケージをプロジェクトにインストールしてから、ページ上の AJAX リクエストの一部がサーバーから 401 に到達するたびにトリガーされるグローバル ajax イベントを登録するだけです。

<script type="text/javascript">
    $.ajaxSetup({
        statusCode: {
            401: function () {
                window.location.href = '@Url.Action("logon", "account")';
            }
        }
    });
</script>
于 2012-04-09T06:32:22.267 に答える