我想列出母版页中的所有现有控制器。
例如:
在我的Controller文件夹中,我有:
在我的Site.master中,我想动态列出所有这些Action控制器。
答案 0 :(得分: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 :(得分:1)
在我的Site.master中,我想动态列出所有这些Action控制器。
视图不应该提取数据。它们应该显示由控制器传递的数据/模型。因此,在控制器中,您可以使用反射列出从Controller派生的所有类型,并将它们传递给视图进行渲染。另一种可能性是拥有一个可以完成工作的HTML帮助程序。