Asp.net mvc 3 VS Express MVC3新手重定向问题

Asp.net mvc 3 VS Express MVC3新手重定向问题,asp.net-mvc-3,visual-studio,Asp.net Mvc 3,Visual Studio,我是MVC的新手,多年来一直在做经典的ASP。我不知道该怎么问这个问题。基本上,我希望一个控制器的动作无缝地传输/重定向到另一个视图/控制器。我试过了 public class SetupController : Controller { ... public ActionResult Bicycles() { return RedirectToAction("Index", "Bicycles");

我是MVC的新手,多年来一直在做经典的ASP。我不知道该怎么问这个问题。基本上,我希望一个控制器的动作无缝地传输/重定向到另一个视图/控制器。我试过了

    public class SetupController : Controller
    {
        ...
        public ActionResult Bicycles()
        {
            return RedirectToAction("Index", "Bicycles");
        }
    }
但问题是,这会把我带到不存在的localhost/Bicycles。我想要的是转到localhost/Setup/Bicycles。我尝试将安装父文件夹添加到控制器名称:

    public class SetupController : Controller
    {
        ...
        public ActionResult Bicycles()
        {
            return RedirectToAction("Index", "Setup/Bicycles");
        }
    }
但这创造了一个无限的重定向循环,浏览器理所当然地拒绝这样做


希望我想做的有意义。

我相信你要找的是:

    public ActionResult Bicycles()
    {
        return RedirectToAction("Bicycles", "Setup");
    }
第一个参数是动作,第二个参数是控制器

由于您已经在自行车操作中使用了SetupController,您将获得无限重定向。然而,从你提到的,这就是你试图重定向到的地方

protected internal RedirectToRouteResult RedirectToAction(
    string actionName,
    string controllerName
)

因此,您的第一个示例重定向到Bicycles controller中的索引操作,因此使用localhost/Bicycles。

您的第一个示例按预期工作。请参见下面的答案。这导致无限重定向循环是正确的,这是因为该方法只是重定向到自身。但这似乎是你的问题所提到的理想的重定向。你的实际预期行为是什么?这将帮助我们帮助您。我正在尝试将相关视图分组到安装文件夹下,这样它们就不会使站点根目录结构复杂化。所以,我想要,像Setup/Bicycles、Setup/Tags、Setup/Routes等等。我不想让它们直接放在视图根目录下,换句话说。顺便说一句,当我坚持使用1级的deep-View目录结构时,这些东西会起作用。但是子文件夹似乎把一切都搞糟了。好吧,最简单的方法是保持标准的MVC结构,为控制器设置一个文件夹,其中的视图与动作名称匹配。在您的特定情况下,安装程序是控制器,其中每种类型都是动作和视图。因此,您将拥有一个/Views/Setup/文件夹,其中包含一个名为Bicycles的视图、另一个命名标记等。这样,全局路由将自动对您有利,而不必手动路由所有内容。现在,难道结构不应该相反吗?例如,将自行车视为一种资源,例如,拥有自行车控制器和设置操作。如何转到localhost/Setup/Bicycles?我想将相关的安装视图分组到安装文件夹下。我不想把自行车藏在地下去哪里?正如巴勃罗所写的,你使用返回重定向到动作自行车,设置;转到localhost/setup/bicycles,但不能将其置于与获得无限重定向相同的操作中。把它放在任何其他的动作中,比如索引。我只是想组织视图,这样我就不会有一个大的视图目录,这样一起的东西就可以物理地分组在一起了。也许我根本不需要动作链接——我不知道。如果我坚持在视图下使用1级深度目录结构,我可以让事情顺利进行,但我希望您可以将视图任意嵌套在文件夹中,并在其中轻松导航。