RedirectToAction работает в контроллере, но не обновляет представление и URL - PullRequest
0 голосов
/ 21 января 2019

У меня есть контроллер для входа / регистрации и связанных действий. С тех пор, как я изменил представление, которое я сделал для тестирования с помощью Html-помощников, на то, которое мой дизайнер пользовательского интерфейса предоставил с помощью html, после входа я не перенаправляюсь на страницу индекса.

Сначала я подумал, что форма входа не отправляется, но после вставки некоторых кодов отладки консоли я понял, что в контроллере меня перенаправляют на действие Index, но представление Index не отображается в моем браузере, и URL-адрес не меняется Некоторые разработчики с той же проблемой сказали, что это из-за кнопок AJAX, но я не думаю, что мое мнение имеет те, насколько я знаю, и я не знаю, как в этом убедиться.

Это мой код AccountController и действия в нем. Я удалил из него лишние коды:

public ActionResult Index()
{
    Console.WriteLine("Redirected To Index");
    return View(model);
}
public ActionResult Login()
{            
    Console.WriteLine("Entered Login Get Action");
    return View();
}

[HttpPost]
public ActionResult Login(LoginViewModel model)
{
    Console.WriteLine("Entered Login Post Action");
    if (ModelState.IsValid)
    {
        Console.WriteLine("Login Redirect Action");
        return RedirectToAction("Index");
    }
    return View(model);
}

и эта форма в моем представлении входа в систему отправляется с удаленными избыточными кодами:

     <form class="cozy" method="post">
        @Html.TextBoxFor(model => model.Username)
        @Html.PasswordFor(model => model.Password)
        <input type="submit" name="login" value="Login"/>
     </form>

После отправки в консоли печатается «Redirected To Index» вместе с предыдущими строками, но я не перенаправляюсь на фактическую страницу.

Заранее спасибо, что уделили время на решение моей проблемы.

Ответы [ 3 ]

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

Вместо использования return View(model); попробуйте указать полный путь представления:

public ActionResult Index()
{
    Console.WriteLine("Redirected To Index");
    return View("add actual path of the view", model); 
    //For Example
    //return View("~/Views/Test/Login.cshtml", model); 
}
0 голосов
/ 21 января 2019

Кажется, проблема была в некоторых js-скриптах в представлении, препятствующих перенаправлению.Я удалил их, и код снова начал работать правильно.затем я снова добавил ссылки js, и теперь код работает.Я не знаю, почему и как это не было раньше, но это было то, что я сделал, чтобы это снова заработало.

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

Я думаю, что вы пропустили action атрибут в форме.

<form class="cozy" method="post" action="@Url.Action("Login","Account")">
        @Html.TextBoxFor(model => model.Username)
        @Html.PasswordFor(model => model.Password)
        <input type="submit" name="login" value="Login"/>
</form>

Это вызовет действие Login с методом post, когда вы нажмете кнопку отправки в вашей форме. َ Как предлагается в комментариях, вы можете использовать Html.BeginForm бритвенный помощник вместо чистого HTML-кода.

@using (Html.BeginForm("Login", "Account", FormMethod.Post, new { id = "myform", @class = "cozy", enctype = "multipart/form-data" })) {
        @Html.TextBoxFor(model => model.Username)
        @Html.PasswordFor(model => model.Password)
        <input type="submit" name="login" value="Login"/>
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...