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