2012-08-30 47 views
0

我不完全理解如何在asp.net mvc中使用路由。 我已經在2個主文件夾中組織了我的視圖和控制器:frontoffice和backoffice。 現在,我想有一個構建URL以這種方式裏面後臺的操作:在古典的方式frontoffice /控制器/動作/參數 和那些文件夾裏面frontoffice:控制器/動作/參數個性化asp.net MVC路由標尺

我寫了這些規則,但他們不正確

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

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

這樣,在frontoffice內的所有行動建立與'backoffice'的網址。我應該怎麼做?

+0

哪MVC的版本?你有沒有嘗試添加兩個「區域」? –

+0

在FrontOffice路線開始處的斜線是否有打字錯誤?你有沒有嘗試從路線定義中移除它? – JTMon

+0

你應該看看[Areas](http://www.codeguru.com/csharp/.net/net_asp/mvc/article.php/c20227/Using-Areas-in-ASPNET-MVC-Application.htm)是什麼在MVC中。當這些創建時,它會相應地更新您的路由引擎。 –

回答

0

文件夾在ASP.NET MVC中不重要。

無論您將什麼文件夾放入什麼文件夾中,都不對應於路由引擎要查找的位置。

這裏是你如何做到這一點:

的慣例是把你的控制器名爲控制器文件夾中,但是這僅僅是慣例,我不認爲它會影響路由(儘管它可能)。

確保您的控制器名稱追加到它的名稱Controller,並從基礎控制器類或IController繼承。例如:

public class MyController : Controller 

其次,您的路由是爲URL。

routes.MapRoute(
    "Backoffice", 
    "backoffice/{controller}/{action}/{id}" 

要進入這條路線,你需要兩樣東西,既不都與你的目錄結構做:

  • 有一個控制器,從Controller派生或實現IController
  • 請適當調用該控制器:/backoffice/home/list/1

如果您希望控制器基於文件夾結構,那麼您可能需要使用namespace參數,並確保您的名稱空間與目錄結構相匹配。

你會你的路由變更爲look like this

routes.MapRoute(
    "backoffice", 
    "backoffice/{controller}/{action}/{id}", 
    new[] { "MyProject.Backoffice.Controllers" } 
); 

那麼你的目錄結構應該是:

MyProject 
    | 
    - FrontOffice 

    - BackOffice 
    | 
    - Controllers 
     | 
     - MyController.cs 

併爲您的控制器命名空間應該是:

namespace MyProject.Backoffice.Controllers 
{ 
    public class MyController