Asp.net MVC 5 Просмотр не рендеринг до перезагрузки страницы с F5 - PullRequest
0 голосов
/ 25 октября 2018

Когда пользователь моего приложения нажимает кнопку «Выйти» напрямую, он выходит из системы и возвращается на страницу входа (см. Код ниже для обоих действий).Это работает по назначению, однако пользователи с правами администратора могут принудительно выходить из системы отдельных пользователей.В настоящее время я делаю это с SignalR, и столкнулся со странной проблемой.

Когда я перенаправляю на LogOff из клиентского метода, все вызывается правильно.Пользователь клиента вышел из системы, и RedirectToAction правильно перенаправляет на действие LogIn.Однако представление LogIn не отображается, пока я не обновлю страницу вручную с помощью F5.Мне совершенно не удалось понять, почему представление не отображается в первый раз

Действие по выходу из системы

    public ActionResult LogOff()
    {
        FormsAuthentication.SignOut();

        return RedirectToAction("Login", "Account");
    }

Действие по входу в систему

    public ActionResult Login(string returnUrl, string displayMsg)
    {
        ViewBag.ReturnUrl = returnUrl;
        ViewBag.DisplayMsg = displayMsg;
        ViewBag.PasswordAttempts = 0;
        return View();
    }

Клиентский метод SignalR

$.connection.hub.start();
authHub.client.LogOut = function () {
    $.ajax({
        url: '@Url.Action("LogOff", "Account", new { area = ""})',
        type: "POST"
    });
    $.connection.hub.stop();
}

Просмотр входа в систему

section id="loginForm">

            <div class="col-md-12">
                <div class="wrap">
                    <p class="form-title">Log In</p>

                        @using (Html.BeginForm("Login","Account",new {ViewBag.ReturnUrl, ViewBag.PasswordAttempts}, FormMethod.Post, new{@class="login"}))
                        {
                            @Html.AntiForgeryToken()
                            <section class="DisplayMsg">@ViewBag.DisplayMsg</section>

                            <section>@Html.ValidationMessageFor(m => m.UserName) </section>
                            <label>User Name:</label> @Html.TextBoxFor(m => m.UserName)

                            <section>@Html.ValidationMessageFor(m => m.Password)</section>
                            <label>Password:</label>@Html.PasswordFor(m => m.Password)

                            <input type="submit" value="Log In" class="btn btn-success btn-sm" />
                                @*<div class="reset-forgot">
                                    <div class="row">
                                        <div class="col-md-6 reset-pass-content">
                                            @Html.ActionLink("Reset Password", "PasswordReset", "Account", new {area = string.Empty})
                                        </div>
                                    </div>
                                </div>*@
                        }
                </div>
            </div>

1 Ответ

0 голосов
/ 25 октября 2018

Поскольку вы делаете Ajax-вызов, который никогда не перенаправит пользователя на страницу входа, он просто выведет пользователя из системы на стороне сервера.Вы можете использовать location.href, чтобы перенаправить пользователя на страницу входа после выхода на сервер:

$.connection.hub.start();
   authHub.client.LogOut = function () {
      $.connection.hub.stop();
      $.ajax({
      url: '@Url.Action("LogOff", "Account", new { area = ""})',
      type: "POST",
      success: function(){
          location.href = '@Url.Action("Login", "Account")'
      }
  });
}
...