ASP.NET MVC Programmatically Get a List of Control

2019-01-07 11:17发布

In ASP.NET MVC is there a way to enumerate the controllers through code and get their name?

example:

AccountController
HomeController
PersonController

would give me a list such as:

Account, Home, Person

4条回答
成全新的幸福
2楼-- · 2019-01-07 11:47

Create the property in every controller and then you get the name like this.

查看更多
何必那么认真
3楼-- · 2019-01-07 11:52

All who using this post better read this post before: using Assembly.GetCallingAssembly() not returns the calling assembly

The issue is that razor views are acting as independent dynamic assemblies and you don't get the desired assembly.

Yair

查看更多
疯言疯语
4楼-- · 2019-01-07 12:03

You can reflect through your assembly and find all classes which inherit from type System.Web.MVC.Controller. Here's some sample code that shows how you could do that:

http://mvcsitemap.codeplex.com/WorkItem/View.aspx?WorkItemId=1567

查看更多
Rolldiameter
5楼-- · 2019-01-07 12:04

Using Jon's suggestion of reflecting through the assembly, here is a snippet you may find useful:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Web.Mvc;

public class MvcHelper
{
    private static List<Type> GetSubClasses<T>()
    {
        return Assembly.GetCallingAssembly().GetTypes().Where(
            type => type.IsSubclassOf(typeof(T))).ToList();
    }

    public List<string> GetControllerNames()
    {
        List<string> controllerNames = new List<string>();
        GetSubClasses<Controller>().ForEach(
            type => controllerNames.Add(type.Name));
        return controllerNames;
    }
}
查看更多
登录 后发表回答