2011-04-29 61 views
0

我有accountController類,它有登錄&主頁視圖。如何在使用RedirectToAction時跳過控制器名稱?

 
    [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" }); 

當我嘗試瀏覽器上的這兩個URL他們工作正常。但是,當登錄成功,然後去http://lmenaria.com/account/home 那麼我怎麼能從這個URL中刪除「帳戶」。這是當我使用返回RedirectToAction(「家」);並獲得404錯誤。

所以,請讓我知道我該如何解決這個問題。我不需要URL中的控制器名稱。

感謝 Laxmilal Menaria

回答

1

routes.MapRoute(「home」,「home」,new {controller =「account」,action =「home」});

我試着用上圖MapRoute &用RedirectToRoute代替RedirectTOAction及其工作。

謝謝。

0

如果你想預設控制器 「帳戶」,而不會出現在URL,那麼你可以這樣做

routes.MapRoute(NULL,「{行動}「,new {controller =」account「});

如果你願意,你可以用一個行動的默認值也

routes.MapRoute(NULL, 「{}行動」,新{控制器= 「帳戶」,行動= 「家」});


我在編輯我的答案,讓你知道你不需要明確定義每條路線。 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將使用與您的網址匹配的第一個模式。

0

我認爲真正的問題是你要麼沒有創建或刪除家庭控制器。

從您的描述看來,它確實聽起來像您應該爲主控制器索引操作調用RedirectToAction。

0

您在登錄操作中有[HttpPost]。這應該是問題。我只是在沒有[HttpPost]屬性的情況下運行你的代碼。這是工作。當您鍵入http://lmenaria.com/login時,由於該屬性,您的「登錄」操作不會被觸發。所以,必須有一些其他路由來完成路由。

相關問題