如何从另一个控制器重定向到索引?

时间:2011-10-25 15:57:07

标签: c# asp.net-mvc

我一直在努力寻找某种方法从另一个控制器重定向到Index视图。

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

这就是我现在尝试的。现在我给出的代码有一个ActionLink,它链接到我需要的页面Redirect

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

8 个答案:

答案 0 :(得分:243)

使用带有控制器名称的重载...

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

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

答案 1 :(得分:26)

尝试:

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

答案 2 :(得分:15)

您可以使用以下代码:

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

请参阅RedirectToAction

答案 3 :(得分:1)

您可以使用本地重定向。 以下代码跳转到HomeController的索引页面:

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

            return View();
        }
}

答案 4 :(得分:1)

您可以使用重载方法RedirectToAction(string actionName, string controllerName);

示例:

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

答案 5 :(得分: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"
    }
}

如果您尝试使用任何特定于网址的字符串,例如"some_health_url",它将无法正常工作!

答案 6 :(得分:0)

标记助手:

<a asp-controller="OtherController" asp-action="Index" class="btn btn-primary"> Back to Other Controller View </a>

在controller.cs中有一个方法:

public async Task<IActionResult> Index()
{
    ViewBag.Title = "Titles";
    return View(await Your_Model or Service method);
}

答案 7 :(得分:0)

RedirectToRoute() 是另一种选择。只需将路由作为参数传递即可。此外,使用 nameof() 可能是更好的约定,因为您没有将控制器名称硬编码为字符串。

 return RedirectToRoute(nameof(HomeController) + nameof(HomeController.Index));