В ASP.NET MVC есть способ перечислить контроллеры через код и получить их имя?
пример:
AccountController HomeController PersonController
даст мне список, такой как:
Account, Home, Person
Используя Предложение Джона об отражении в сборке , вот фрагмент, который может оказаться полезным:
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; } }
Вы можете просмотреть свою сборку и найти все классы, которые наследуются от типа System.Web.MVC.Controller. Вот пример кода, который показывает, как вы могли бы сделать это:
http://mvcsitemap.codeplex.com/WorkItem/View.aspx?WorkItemId=1567
Всем, кто использует этот пост, лучше прочитать этот пост раньше: с использованием Assembly.GetCallingAssembly () не возвращает вызывающую сборку
Проблема в том, что виды бритвы действуют как независимые динамические сборки, и вы не получаете нужную сборку.
Яир
Создайте свойство в каждом контроллере, а затем вы получите имя, подобное этому.