我想列出母版頁內所有現有的控制器。如何從母版頁內動態列出現有的操作控制器?
例如:
在我的控制器文件夾中我有:
- 的HomeController用行動指數等...
- ProductController的用行動指標,細節,等...
- 帶動作索引,編輯等的ServiceController ...
- SomethingController with actions Index,Update等...
- 等
從我的Site.master,我想列出所有這些動作控制器動態。
我想列出母版頁內所有現有的控制器。如何從母版頁內動態列出現有的操作控制器?
例如:
在我的控制器文件夾中我有:
從我的Site.master,我想列出所有這些動作控制器動態。
雖然我完全同意@ 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 ...
從我的Site.master中,我想要動態列出所有這些動作控制器。
視圖不應該拉取數據。他們應該顯示控制器傳遞的數據/模型。因此,在控制器內部,您可以使用反射來列出從Controller派生的所有類型,並將它們傳遞給視圖進行渲染。另一種可能性是有一個可以完成這項工作的HTML助手。