2013-03-22 259 views
1

我的項目結構:Mvc區域路由?

Controller 
    AdminController 
    HomeController 

區加入後,我的項目structureI增加了一個管理區域項目,

Areas 
    Admin 
     Controller 
      SomeController 
Controller 
    AdminController 
    HomeController 

然後各個環節都壞了。例如

@Html.ActionLink(
    "go to some action", 
    "SomeAction", 
    "Admin", 
    new { area = "" }, 
    null) 

當我寫上面的鏈接,它的路線我www.myDomain.com/Admin/SomeAction,但是這方面的行動,我想路由到AdminController行動。

我該怎麼做?我應該改變區域還是控制器名稱?

更新

上面的鏈接輸出:

domain/Admin/SomeAction 
// I expect that is AdminController/SomeAction 
// but not. There is SomeAction in my admin controller 
// I get this error "The resource cannot be found." 
// because it looks my expected, but it works unexpected 
// it tries to call AdminArea/SomeController/SomeAction 

更新2

例如:

@Html.ActionLink(
    "go to some action", 
    "SomeAnotherAction", 
    "Admin", 
    new { area = "" }, 
    null) 

上面的鏈接我沒有得到任何電子郵件恐怖,因爲我在我的地區有一些其他行爲。

區registeration

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Admin_default", 
     "Admin/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional } 
    ); 
} 

謝謝...

+0

您必須將其路由到具有SomeAction的控制器。現在你正在從AdminController調用SomeAction ActionResult。你想從AreaController調用SomeAction。或者我錯過了什麼? – William 2013-03-22 13:35:17

+0

已編輯。我也很難解釋。總結,我想調用項目主控制器的操作,但它調用區域控制器的操作。鏈接看起來是正確的,但它的工作不正確。 – 2013-03-22 13:45:46

回答

1

既然您已經註冊地區第一,他們正在採取優先。有沒有簡單的方法解決這個問題。最好的解決辦法是將網站主要部分的AccountController重命名爲其他內容以避免衝突。

另一種可能性是約束控制器在您的區域路線報名:

context.MapRoute(
    "Admin_default", 
    "Admin/{controller}/{action}/{id}", 
    new { action = "Index", id = UrlParameter.Optional }, 
    new { controller = "Some|SomeOther" } 
); 

現在只要求到/Admin/Some/{action}/Admin/SomeOther/{action}將被路由到該地區,這意味着/Admin/SomeAction將受到全球路由定義攔截和路由到您的AdminController

+0

第二種方式正在工作,但它不是優雅的方式,因爲我應該所有的區域控制器,對吧?如果是的話,我會改變我的管理員控制器名稱...感謝您的建議... – 2013-03-22 14:10:50