2017-01-25 75 views
3

我寫了我的這樣的路線。RedirectToAction重定向錯誤與其他命名空間asp.net mvc

routes.MapRoute(
    name: "AdminECommerce", 
    url: "Admin/ECommerce/{controller}/{action}/{id}", 
    defaults: new { id = UrlParameter.Optional }, 
    namespaces: new []{ "AdminEcommerce.Controllers" } 
); 

routes.MapRoute(
    name: "ECommerce", 
    url: "ECommerce/{controller}/{action}/{id}", 
    defaults: new { id = UrlParameter.Optional }, 
    namespaces: new []{ "Ecommerce.Controllers" } 
); 

routes.MapRoute(
    name: "User", 
    url: "Plugin/User/{controller}/{action}/{id}", 
    defaults: new { id = UrlParameter.Optional }, 
    namespaces: new []{ "User.Controllers" } 
); 

routes.MapRoute(
    name: "UserRegistration", 
    url: "Plugin/UserRegistration/{controller}/{action}/{id}", 
    defaults: new { id = UrlParameter.Optional }, 
    namespaces: new []{ "UserRegistration.Controllers" } 
); 

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

當我想在同一個控制器重定向別的地方使用RedirectToAction從一個動作到另一個動作。

例如,我想它我重定向到

Plugin/UserRegistration/Register/Register 

但是,它把我送到

Admin/ECommerce/Register/Register 

我不得不提到我的控制器都在其他庫。

我的代碼有什麼問題?

更新:控制器Registration

public ActionResult Register() 
    { 
     ViewBag.securityQuestions = _dataRepository.GetContext().User_SecurityQuestion; 
     return View(); 
    } 

    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult RegisterNewUser(User_User model, FormCollection collection) 
    { 

     try 
     { 
      // register new user 
       ... 
      return RedirectToAction("Register"); 
     } 
     catch 
     { 
      // making error messages 
       ... 
      return RedirectToAction("Register"); 
     } 

我也試過這個,

return RedirectToAction("Register","Registration"); 

它不工作。

+0

顯示控制器代碼重定向 –

+0

我看到這條路線'AdminECommerce'執行第一,而不是'自上而下的路線順序UserRegistration',如果他們在區域您可以添加區域參數爲'defaults'到區分它們。 –

+0

我的項目中沒有區域,只是爲我的項目的每個部分分開類庫。 –

回答

2

ASP.NET MVC通過UriTemplate

識別這兩種路線,一樣
routes.MapRoute(
    name: "AdminECommerce", 
    url: "Admin/ECommerce/{controller}/{action}/{id}", 
    defaults: new { id = UrlParameter.Optional }, 
    namespaces: new []{ "AdminEcommerce.Controllers" } 
); 

routes.MapRoute(
    name: "UserRegistration", 
    url: "Plugin/UserRegistration/{controller}/{action}/{id}", 
    defaults: new { id = UrlParameter.Optional }, 
    namespaces: new []{ "UserRegistration.Controllers" } 
); 

MVC讀取路由表從上到下進行匹配請求的URL與UriTemplate。所以,在這種情況下,它會選擇第一個模板。

嘗試使用RedirectToRoute代替。

return RedirectToRoute("Registration", new 
{ 
    controller = "Registration", 
    action = "Register" 
}); 
+2

第一個參數我用「UserRegistration」替換了「Registration」,現在它運行良好, 謝謝。 –

+0

很高興能有幫助:) – Marusyk

+0

我可以證實這是真的。我有同樣的問題。最簡單的方法是不要爲Action方法和Class名稱使用相同的名稱。但無論如何,如果可能的話,我希望這會得到改進。 :/第二個選項是使用重定向到url而不是redirectToAction,如下所示:'Redirect(「http://www.google.com/」)'。 – JedatKinports