Перенаправление (URL) не работает - PullRequest
8 голосов
/ 13 сентября 2011

В контексте ASP.net MVC3 у меня есть эта строка кода в действии контроллера, которая пытается перенаправить на определенный URL.

return Redirect(returnUrl);

returnUrl - строка, содержащая «/ Home / Index /». По какой-то причине перенаправление не происходит, и я остаюсь на том же экране. Я попытался удалить косую черту, но безуспешно. Есть идеи, почему не происходит перенаправление?

Ответы [ 3 ]

18 голосов
/ 13 сентября 2011

Метод Redirect предназначен для перенаправления на внешние URL-адреса вашего сайта и передачи ему абсолютного URL-адреса.Если вам нужно перенаправить на другое действие контроллера, принадлежащее вашему сайту, было бы лучше использовать это:

return RedirectToAction("Index", "Home");

Таким образом, вы больше не будете жестко программировать URL-адреса, и ваш код будет менее хрупким для изменений маршрута.

При этом, если вы вызываете действие контроллера, которое выполняет это перенаправление с AJAX, вы не можете ожидать, что оно перенаправит браузер куда-либо => оно, очевидно, останется на той же странице.AJAX-запрос будет выполнен успешно после всех перенаправлений, и в случае успешного обратного вызова вы получите окончательный HTML-код URL /Home/Index, как если бы он был запрошен без AJAX.

Если вы хотите перенаправить в случае успешного обратного вызоваВызов AJAX может привести к тому, что действие вашего контроллера вернет, например, объект JSON, указывающий целевой URL, на который вы хотите перенаправить:

return Json(new { redirectToUrl = Url.Action("Index", "Home") });

, а в вашем обратном вызове используйте функцию window.location.href:

success: function(result) {
    window.location.href = result.redirectToUrl;
}
2 голосов
/ 22 июля 2013

Если вы застряли на одном экране входа в систему после предоставления действительных учетных данных для входа, возможно, вы не установили cookie проверки подлинности с помощью форм.

Всякий раз, когда вы используете Redirect или RedirectToLocal в своих методах действий входа в систему, убедитесьвызовите в следующем порядке:

FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
return RedirectToLocal(returnUrl);

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

Спасибо

0 голосов
/ 05 ноября 2018

У меня была такая же проблема в MVC 5, стандартная разметка login.cshtml работала нормально. У меня были проблемы только тогда, когда я включал HTML-разметку для шаблона, который я купил. Итак, я начал заменять код login.cshtml по крупицам. Как оказалось, проблема была в том, что шаблон включал плагин JQuery под названием «rd-mailform», и это вызывало проблему.

Это не сработало:

@ using (Html.BeginForm ("Login", "Account", new {ReturnUrl = ViewBag.ReturnUrl}, FormMethod.Post, new {@class = "rd-mailform form-modern form-darker", role = "форма"}))

И это сработало:

@ using (Html.BeginForm ("Login", "Account", new {ReturnUrl = ViewBag.ReturnUrl}, FormMethod.Post, new {@class = "form-modern form-darker", role = "form") }))

Иногда дизайнеры, которые создают эти шаблоны, смешивают функциональность с дизайном, поэтому вы должны остерегаться этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...