Як перенаправити на Index з іншого контролера?


129

Я переглядав, намагаючись знайти спосіб перенаправити Indexпогляд на інший контролер.

public ActionResult Index()
{                
     ApplicationController viewModel = new ApplicationController();
     return RedirectToAction("Index", viewModel);
}

Це те, що я намагався зараз. Тепер код, який мені дали, містить ActionLinkпосилання на сторінку, що мені Redirectтеж потрібна .

@Html.ActionLink("Bally Applications","../Application")

Відповіді:


272

Використовуйте перевантаження, які також приймають ім'я контролера ...

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

і

@Html.ActionLink("Link Name","Index", "MyController", null, null)

3
Добре це спрацювало. Я спробував це раніше, мабуть, був помилковим, коли я робив це раніше.
cjohnson2136

2
зробив це раніше, але був
зупинений

Ах, для нас MVC-новачків це було надзвичайно корисно. Просто я перенаправлявся на інший погляд у іншій папці, представленій іншим контролером, отримував мене, поки я не прочитав це.
atconway

як перенаправити на подання без контролера? наприклад,Shared/Error
Ділан Ченскі

28

спробуйте:

public ActionResult Index() {
    return RedirectToAction("actionName");
    // or
    return RedirectToAction("actionName", "controllerName");
    // or
    return RedirectToAction("actionName", "controllerName", new {/* routeValues, for example: */ id = 5 });
}

і з .cshtmlогляду:

@Html.ActionLink("linkText","actionName")

АБО:

@Html.ActionLink("linkText","actionName","controllerName")

АБО:

@Html.ActionLink("linkText", "actionName", "controllerName", 
    new { /* routeValues forexample: id = 6 or leave blank or use null */ }, 
    new { /* htmlAttributes forexample: @class = "my-class" or leave blank or use null */ })

Повідомлення про використання nullв остаточному виразі не рекомендується, а краще використовувати порожнє new {}замістьnull


3
Що стосується Вашого повідомлення, з якої причини краще використовувати new {}замість цього null?
musefan

16

Ви можете використовувати наступний код:

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

Див. Розділ RedirectToAction


Я спробував це, і це не вийшло. Це дало мені сторінку не вдалося знайти помилку
cjohnson2136

має бути з "Контролером": return RedirectToAction("Index", "Home");
Hiraeth

Мені потрібно використовувати "/ Index", інакше не знайдено
code4j

@ code4j як ви визначили маршрути за замовчуванням? Ви додали значення за замовчуванням для контролера та дії?
Wouter de Kort

2

Можна скористатися методом перевантажень RedirectToAction(string actionName, string controllerName);

Приклад:

RedirectToAction(nameof(HomeController.Index), "Home");

1

Можна використовувати локальне переспрямування. Наступні коди стрибають на сторінку Index Index HomeController:

public class SharedController : Controller
    {
        // GET: /<controller>/
        public IActionResult _Layout(string btnLogout)
        {
            if (btnLogout != null)
            {
                return LocalRedirect("~/Index");
            }

            return View();
        }
}

0

Повна відповідь (.Net Core 3.1)

Більшість відповідей тут правильні, але виведені трохи поза контекстом, тому я надам повноцінну відповідь, яка працює для Asp.Net Core 3.1. Для повноти:

[Route("health")]
[ApiController]
public class HealthController : Controller
{
    [HttpGet("some_health_url")]
    public ActionResult SomeHealthMethod() {}
}

[Route("v2")]
[ApiController]
public class V2Controller : Controller
{
    [HttpGet("some_url")]
    public ActionResult SomeV2Method()
    {
        return RedirectToAction("SomeHealthMethod", "Health"); // omit "Controller"
    }
}

Якщо ви спробуєте використати будь-який із рядків, що стосуються URL, наприклад "some_health_url", це не вийде!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.