Контроллер действий MVC не отображает страницу - PullRequest
0 голосов
/ 07 января 2019

после составления формы, необходимой для регистрации на сайте (Registration.cshtml), данные формы отправляются в sqlite db (успешно). Возвращаясь к этому, я хочу, чтобы меня отправили на веб-страницу Main.cshtml. Проблема заключается в том, что контроллер Action, предназначенный для отображения представления Main.cshtml, этого не делает.

Я много раз пытался изменить методы Redirect / RedirectToAction и View, но это была ошибка.

   return View("Main");
   return RedirectToAction("Main");
   return JavaScript("window.location = window.location.origin + /Pages/Main");

PagesController.cs

   [HttpPost]
   public ActionResult Register {
        if (insert data in db == true) {
            return RedirectToAction("Main");
        }

        return View();
   }

   public ActionResult Main(){
        return View();
   }

Main.cshtml

    @{
         Layout = "~/Views/Layouts/LoggedMasterPage.cshtml";
         ViewBag.Title = "Benvenuto in ETL365"; 
     }
     @section Head{
          <link rel="stylesheet" href="~/Content/Main.css" />
          <script type="text/javascript" src="~/Scripts/Main.js"></script>
     }

Часть моего Register.js

         $("#register").dxButton({
             text: "Registrati",
             type: "normal",
             hint: "Clicca per registrarti",
             onClick: function () {
               if($('#password').
               dxValidator('instance').validate().isValid &&
               $('#email').dxValidator('instance').validate().isValid) {
                     let email = $("#email").dxTextBox('instance').option('value');
                     let pass = $("#password").dxTextBox('instance').option('value');

                     $.ajax({
                         url: window.location.origin + '/Pages/Register',
                         type: "POST",
                         data: '{"email":"' + email + '","password":"' + pass + '"}',
                         contentType: "application/json; charset=utf-8",
                         dataType: "json",
                      });
               }
             }
          });

Я уже использовал точки останова на Main.cshtml, и он действительно появляется после

     return View();

выполнено действием Main (). То, что я ожидаю, будет перенаправлено на mylocalhost: xxxx / Pages / Main То, что я получаю, абсолютно ничего, я всегда нахожусь в mylocalHost: xxxx / Pages / Register

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Нельзя использовать RedirectToAction для ответа на вызов AJAX, поскольку запросы AJAX предназначены для обновления представления без перезагрузки всей страницы. Вам нужно передать URL как ответ JSON, например:

[HttpPost]
public ActionResult Register(string email, string password) 
{
    if (condition) // put your condition here
    {
        return Json(new { 
            status = "Success", 
            url = Url.Action("Main", "Pages")
        });
    }

    // since this controller receives AJAX request, the partial view should be used instead
    return PartialView("_Register");
}

Затем в состоянии AJAX success вы можете проверить статус ответа и перенаправить на целевой URL:

$.ajax({
    url: '@Url.Action("Register", "Pages")',
    type: "POST",
    data: { email: email, password: pass },
    success: function (result) {
        if (typeof result.status !== undefined && result.status == "Success") {
            location.href = result.url; // redirect to main page
        }
        else {
            $('#register').html(result); // refresh partial view
        }
    }
});

Похожие проблемы:

вернуть url.action как объект json mvc

0 голосов
/ 07 января 2019

Вам необходимо перенаправить на главную страницу после успешного вызова ajax.

$.ajax({
...
    success:
    {
    location.href = 'mylocalhost:xxxx/Pages/Main'
    }
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...