2012-09-27 40 views
0

我想設計我們的控制器和操作是這樣的:處理瑣碎和複雜的操作以及路線

有每一個被稱爲「StaticPage(字符串頁)」(有關創建BaseController從派生思想控制器的一個行動但現在,我們只會談論「套件」作爲控制器)。
此操作返回視圖,主要包含HTML代碼並且不包含模型。 因此,我不希望爲20個不重要的視圖創建20個動作,而是希望通過一個參數來管理和區分它們。

但是在同一個控制器上,我希望他們有動作,返回與模型視圖,並做更復雜的和數據庫相關的東西。起初,我想到了以下路線(注:在這種情況下,存在一個面積「產品」):

context.MapRoute(
     "Product_default", 
     "Product/{controller}/{action}", 
     new { action = "index"} 
    ); 

    context.MapRoute(
     "StaticPage_Route", 
     "Product/{controller}/{page}", 
     new { action = "StaticPage", page = UrlParameter.Optional 
    ); 

因此,可以說,我們得到了查看TechnicalSpecification.cshtmlTrivialPage。 CSHTML當我打電話

/產品/套件/ TechnicalSpecification

應搜索,找到行動 「TechnicalSpecification」,但是當我嘗試

/產品/套件/ TrivialPage

也應該先搜索行動 「TrivialPage」。但是,當它沒有找到它時,它應該將其視爲一個稱爲頁面的參數(就像我在上面提到的路線)。

但我真的不知道,如何管理這個權利。 有沒有設置自定義ActionFilter屬性,檢查OnActionExecuted(...)中的某些東西,然後做一些事情來調用「StaticPage」 - 行動?

回答

0

我自己找到了解決方案。
重寫HandleUnknownAction會訣竅。 的代碼看起來是這樣的:

protected override void HandleUnknownAction(string actionName) 
     { 
      this.View(actionName).ExecuteResult(this.ControllerContext); 
     } 

此外,三號「StaticPage_Route」沒有必要了,所以我刪除了這條路線。由此,我只需要在相應的視圖文件夾中放置簡單的視圖,並且覆蓋方法調用它們(如果可用)。
有了這個,我可以節省很多簡單的代碼,不需要實現這些網站。