Reputation: 1591
I have been looking through trying to find some way to redirect to an Index
view from another controller.
public ActionResult Index()
{
ApplicationController viewModel = new ApplicationController();
return RedirectToAction("Index", viewModel);
}
This is what I tried right now. Now the code I was given to has a ActionLink
that links to the page I need to Redirect
too.
@Html.ActionLink("Bally Applications","../Application")
Upvotes: 142
Views: 350387
Reputation: 335
RedirectToRoute() is another option. Just pass the route as the argument. Also, using nameof() might be a better convention since you are not hard coding the controller name as a string.
return RedirectToRoute(nameof(HomeController) + nameof(HomeController.Index));
Upvotes: 0
Reputation: 1
Tag helpers:
<a asp-controller="OtherController" asp-action="Index" class="btn btn-primary"> Back to Other Controller View </a>
In the controller.cs have a method:
public async Task<IActionResult> Index()
{
ViewBag.Title = "Titles";
return View(await Your_Model or Service method);
}
Upvotes: 0
Reputation: 1588
Most answers here are correct but taken a bit out of context, so I will provide a full-fledged answer which works for Asp.Net Core 3.1. For completeness' sake:
[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"
}
}
If you try to use any of the url-specific strings, e.g. "some_health_url"
, it will not work!
Upvotes: 0
Reputation: 41
You can use the overloads method RedirectToAction(string actionName, string controllerName);
Example:
RedirectToAction(nameof(HomeController.Index), "Home");
Upvotes: 3
Reputation: 39898
You can use the following code:
return RedirectToAction("Index", "Home");
See RedirectToAction
Upvotes: 20
Reputation: 1906
You can use local redirect. Following codes are jumping the HomeController's Index page:
public class SharedController : Controller
{
// GET: /<controller>/
public IActionResult _Layout(string btnLogout)
{
if (btnLogout != null)
{
return LocalRedirect("~/Index");
}
return View();
}
}
Upvotes: 2
Reputation: 27593
try:
public ActionResult Index() {
return RedirectToAction("actionName");
// or
return RedirectToAction("actionName", "controllerName");
// or
return RedirectToAction("actionName", "controllerName", new {/* routeValues, for example: */ id = 5 });
}
and in .cshtml
view:
@Html.ActionLink("linkText","actionName")
OR:
@Html.ActionLink("linkText","actionName","controllerName")
OR:
@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 */ })
Notice using null
in final expression is not recommended, and is better to use a blank new {}
instead of null
Upvotes: 35
Reputation: 48425
Use the overloads that take the controller name too...
return RedirectToAction("Index", "MyController");
and
@Html.ActionLink("Link Name","Index", "MyController", null, null)
Upvotes: 297