Вызов ActionResult контроллера в Javascript

#javascript #ajax #model-view-controller

#javascript #ajax #модель-представление-контроллер

Вопрос:

Я пытаюсь вызвать ActionResult внутри контроллера в javascript.

У меня есть этот ActionResult в моем AdminController .

 [HttpPost]
public ActionResult Logout()
{
    return RedirectToAction("Login", "Login");
}
  

Это мое Logout button в AdminView.

 <a class="navbar-link" id="logout" name="logout" href="#">
    ログアウト
</a>
  

И попробуйте создать событие в JAVSCRIPT.

   $("#logout").click(function () {
        swal({
            title: "ログアウト?",
            text: "アカウントからサインアウトしますか?",
            icon: "warning",
            buttons: true,
            dangerMode: true,
        })
            .then((willLogout) => {
                if (willLogout) {
                    //swal("Poof! Your imaginary file has been deleted!", {
                    //    icon: "success",
                    //});
                    $.ajax({
                        url: "/Admin/Logout",
                        type: 'POST',
                        success: function (result) {
                            document.location.reload(true);
                        }, 
                        error: function (result) {

                        }
                    });
                }
            });
    });
  

Основная цель этого — перенаправить пользователя на страницу входа в систему с помощью контроллера.

Я попытался установить swal("Poof")... внутри .then(willLogout) , и это работает.

но когда я использую ajax для вызова ActionResult. Это не сработало.

Я видел консоль и, кажется, ничего не отображается.

Я не знаю, что я делаю не так.

Как я могу вызвать контроллер ActionResult from в файл Javascript с Ajax помощью call?

Комментарии:

1. Какую структуру вы используете?

2. @HugoElhaj-Lahsen ASP.NET MVC

Ответ №1:

Ну, чтобы помочь моим коллегам-новичкам. Это решение, с которым я справился.

Прежде всего, я узнал, что у каждого ActionResult должно быть представление (если я не ошибаюсь).

Итак, в моем AdminView.cshtml случае я создаю скрытую кнопку.

   <button type="submit" id="submitLogout" name="button" value="logout" hidden>logout</button>
  

После этого в моем JSFILE

Я удалил ajax. что в первую очередь неверно.

    $("#logout").click(function () {
        swal({
            title: "ログアウト?",
            text: "アカウントからサインアウトしますか?",
            icon: "warning",
            buttons: true,
            dangerMode: true,
        })
            .then((willLogout) => {
                if (willLogout) {
                    $("#submitLogout").click();
                }
            });
    });
  

Эта функция в javascript предназначена для запуска скрытой кнопки в .cshtml и запуска ActionResult в контроллере.

Кроме того, в моем контроллере. Это то, что я сказал, что у каждого ActionResult должно быть представление.

  public ActionResult AdminView(string button)
    {
        if (button == "logout")
        {
            FormsAuthentication.SignOut();
            Session.RemoveAll();
            Session.Abandon();
            return RedirectToActionPermanent("Login", "Login");
        }
        else
        {
            if (!(Session["UserInfo"] is UserModel))
            {
                return RedirectToActionPermanent("Login", "Login");
            }
            else
            {
                return View();
            }
        }
    }
  

Параметр string button в ActionResult — это тот name of the button , который вы хотите запустить. Если триггер выполнен успешно, он передаст значение кнопки в аргумент string button .