2010-06-19 99 views
0

我想創建一個MVC應用程序來生成簡報,但我不知道如何構建路由和控制器。如何定義2個控制器的路由和控制器結構?

它由一個索引頁面組成,索引頁面用作多個獨立面板佈局的模板,每個面板包含不同類型的數據。

我想有一個像下面這樣的路線模板:

/Factsheets/Panels/PanelType?fundId=1&countryId=ABC 

所以這是我使用的URL:

/Factsheets/Panels/NameAndDatePanel?Afund=1&county=IE 
/Factsheets/Panels/AssetsPanel?fund=1&county=IE 

我希望有一個情況說明書控制器能夠爲面板控制器提供它所需的配置對象,以生成面板I請求的類型。

我的路由結構應該是什麼樣子?

我的控制器結構應該是什麼樣子?

編輯:

,如果我想有一個ROURE結構如下什麼樣的變化:

我想有一個像下面這樣的路線模板:

/Factsheets/ContentArea/Panels/PanelType?fundId=1&countryId=ABC 

所以這些將會是我正在使用的網址:

/Factsheets/PageTop/Panels/NameAndDatePanel?Afund=1&county=IE 
/Factsheets/PageTop/Panels/AssetsPanel?fund=1&county=IE 

,以便實例化FactsheetsController以包含ContentArea所需的數據,以知道需要生成的面板提供哪些數據。

回答

1

?是查詢字符串後面的內容,因此它不會被路由引擎反映出來。所以,你的路線可能是這樣的:

routes.MapRoute(
    "Default", 
    "{controller}/{action}/{panelType}", 
    new { controller = "Factsheets", action = "Panels", panelType = UrlParameter.Optional } 
); 

而且你將有以下控制器:

public class FactsheetsController : Controller 
{ 
    public ActionResult Panels(string panelType) 
    { 
     return View(); 
    } 
} 

UPDATE:

如果panelType參數是不可選的,你可以提供一個正則表達式約束:

routes.MapRoute(
    "Default", 
    "Factsheets/Panels/{panelType}", 
    new { controller = "Factsheets", action = "Panels", panelType = UrlParameter.Optional }, 
    new { panelType = ".+" } 
); 
+0

如果paneltype不是可選的,該怎麼辦?我會更新qeustion以反映。 – DaveDev 2010-06-19 15:10:04

+0

然後添加一個路由約束,看我的更新。 – 2010-06-19 15:12:45

+0

謝謝 - 我再次更新了問題。 – DaveDev 2010-06-19 15:23:12