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


129

我一直在尝试寻找某种方法来重定向到Index另一个控制器的视图。

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

这就是我现在尝试过的。现在,我得到的代码具有ActionLink链接到我也需要的页面的代码Redirect

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

Answers:


272

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

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

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

3
好的,这可行。之前我尝试过这种打字错误。
cjohnson2136 2011年

2
这样做会更快,但是有一个计时器阻止了我
cjohnson2136 2011年

嗯,对于我们MVC新手来说,这非常有帮助。只是简单地重定向到由不同控制器表示的不同文件夹中的另一个视图,直到我读完为止。
atconway 2012年

如何在没有控制器的情况下重定向到视图?例如Shared/Error
Dylan Czenski '16

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 2011年

应该与“控制器”一起使用: return RedirectToAction("Index", "Home");
Hiraeth

我需要使用“ / Index”,否则将找不到
code4j

@ code4j您如何定义默认路由?您是否已添加控制器和操作的默认值?
Wouter de Kort

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",它将不起作用!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.