如何在使用RedirectToAction时跳过控制器名称?

时间:2011-04-29 16:11:37

标签: asp.net-mvc asp.net-mvc-routing redirecttoaction

我有accountController类,它有登录&家庭意见。

    [HandleError]
    public class accountController : Controller
    {
        [HttpPost]
        public ActionResult login(LoginModal model, string returnUrl)
        {
             //Authentication
             return RedirectToAction("home"); 
        }
        public ActionResult home()
        {
             return View(); 
        }
    } 
------------------------------
-----------------------------
Global.asax have Route entry.. so my urls is 
http://lmenaria.com/login
http://lmenaria.com/home

routes.MapRoute(null, "home", new { controller = "account", action = "home" });
routes.MapRoute(null, "login", new { controller = "account", action = "login" });

当我在浏览器上尝试这两个网址时,它们工作正常。但是当登录成功时,它会转到http://lmenaria.com/account/home 那么如何从此网址中删除“帐户”。当我使用return RedirectToAction(“home”)时会发生这种情况;并得到404错误。

所以请告诉我如何解决这个问题。我在网址中不需要控制器名称。

由于 Laxmilal Menaria

4 个答案:

答案 0 :(得分:1)

routes.MapRoute(“home”,“home”,new {controller =“account”,action =“home”});

我试过以上MapRoute&使用RedirectToRoute而不是RedirectTOAction及其工作。

感谢。

答案 1 :(得分:0)

如果您想将控制器默认为“帐户”,而不在您的网址中显示,那么您可以执行类似

的操作

routes.MapRoute(null,“{action}”,new {controller =“account”});

如果需要,您也可以使用默认值进行操作

routes.MapRoute(null,“{action}”,new {controller =“account”,action =“home”});


我正在编辑我的回答,让你知道你不需要像你一样明确定义每条路线。 MVC路由匹配模式。所以,而不是

routes.MapRoute(null, "home", new { controller = "account", action = "home" }); routes.MapRoute(null, "login", new { controller = "account", action = "login" });

仅使用

routes.MapRoute(null, "{action}", new { controller = "account" });

如果您定义了多个模式,请注意路线顺序,因为顺序很重要。 MVC将使用与您的URL匹配的第一个模式。

答案 2 :(得分:0)

我认为真正的问题是你要么没有创建或删除家庭控制器。

根据您的描述,听起来您应该为家庭控制器索引操作调用RedirectToAction。

答案 3 :(得分:0)

您的登录操作中有[HttpPost]。这应该是问题所在。我只是在没有[HttpPost]属性的情况下运行你的代码。这是工作。当您键入http://lmenaria.com/login时,由于该属性,您的“登录”操作不会被触发。因此,必须有一些其他路由进行路由。