Как перенаправить в индекс с другого контроллера?

129

Я просматривал попытки найти способ перенаправить на Indexпредставление с другого контроллера.

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

Это то, что я пробовал прямо сейчас. Теперь в коде, который мне дали, есть ActionLinkссылка на нужную мне страницу Redirect.

@Html.ActionLink("Bally Applications","../Application")
cjohnson2136
источник

Ответы:

272

Используйте перегрузки, которые тоже принимают имя контроллера ...

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

и

@Html.ActionLink("Link Name","Index", "MyController", null, null)
musefan
источник
3
Хорошо, это сработало. Я пробовал это раньше, должно быть, это была опечатка, когда я делал это раньше.
cjohnson2136
2
сделал это раньше, но меня остановил таймер
cjohnson2136
Ах, для нас, новичков в MVC, это было чрезвычайно полезно. Я просто перенаправлял на другое представление в другой папке, представленной другим контроллером, пока не прочитал это.
atconway 02
как перенаправить на представление без контроллера? такие как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 04
Мне нужно использовать "/ Index", иначе не будет найдено
code4j 08
@ code4j как вы определили маршруты по умолчанию? Вы добавили значения по умолчанию для контроллера и действия?
Воутер де Корт,
2

Вы можете использовать метод перегрузки RedirectToAction(string actionName, string controllerName);

Пример:

RedirectToAction(nameof(HomeController.Index), "Home");
А. Липницкий
источник
1

Вы можете использовать локальное перенаправление. Следующие коды переходят через индексную страницу 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", это не сработает!

ワ イ き ん ぐ
источник