简体   繁体   中英

MVC action controller not rendering the page

after a compiling a form needed for register on the website( Registration.cshtml ), the form data are sent in a sqlite db ( successfully). Returning from that, i want to be sent to a Main.cshtml webpage. The problem is that the Action controller that is suposed to render the Main.cshtml view, isn't doing it.

I've tryed changing the Redirect/RedirectToAction and View methods many times, but it was a failure.

   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>
     }

Part of my 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",
                      });
               }
             }
          });

I've already used breakpoints on Main.cshtml, and it actually gets in there after the

     return View();

done by the action Main(). What i expect is to be redirected to the mylocalhost:xxxx/Pages/Main What i get is absolute nothing, I'm always in mylocalHost:xxxx/Pages/Register

You need to redirect to your main page after a successfull ajax call.

$.ajax({
...
    success:
    {
    location.href = 'mylocalhost:xxxx/Pages/Main'
    }
...

You cannot use RedirectToAction for AJAX call response because AJAX requests are intended to update the view without reloading whole page. You need to pass the URL as JSON response like this:

[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");
}

Then in AJAX success condition you can check response status and redirect to target 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
        }
    }
});

Related issue:

return url.action as json object mvc

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM