2010-09-13 58 views
2

我想列出母版頁內所有現有的控制器。如何從母版頁內動態列出現有的操作控制器?

例如:

在我的控制器文件夾中我有:

  1. 的HomeController用行動指數等...
  2. ProductController的用行動指標,細節,等...
  3. 帶動作索引,編輯等的ServiceController ...
  4. SomethingController with actions Index,Update等...

從我的Site.master,我想列出所有這些動作控制器動態。

回答

2

雖然我完全同意@ Darin的response,但使用ViewData來做這件事相對比較簡單。

關於列舉所有控制器的實際邏輯。由於this是一種合理的做法,我可能無法改進。

您可以使用ViewData來執行某些操作,以便從OnActionExecuting動態存儲所有控制器和操作。您必須創建一個新的控制器,其中所有其他控制器都將從其繼承。

因此,舉例來說,你ProductController的:

public class ProductController : MyCustomController 
{ 
    ... 
} 

...

public class MyCustomController : Controller 
{ 
    protected override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
    base.OnActionExecuting(filterContext); 

    //Some logic (not written) to reflect each of the controllers and actions. Probably something utilising IGrouping. 
    var controllersActions = GetControllersActions(); 

    //Drop your collection into the ControllersActions. 
    filterContext.Controller.ViewData.Add("ControllersActions", controllersActions); 
    } 
} 

在你的母版頁...

<% var controllersActions = ViewData["ControllersActions"]; %> 

... outputting your controllers/actions ... 
1

從我的Site.master中,我想要動態列出所有這些動作控制器。

視圖不應該拉取數據。他們應該顯示控制器傳遞的數據/模型。因此,在控制器內部,您可以使用反射來列出從Controller派生的所有類型,並將它們傳遞給視圖進行渲染。另一種可能性是有一個可以完成這項工作的HTML助手。

相關問題