2009-07-20 58 views
31

在ASP.NET MVC中是否有一種通過代碼枚舉控制器並獲取其名稱的方法?ASP.NET MVC以編程方式獲取控制器列表

例如:

AccountController 
HomeController 
PersonController 

會給我一個清單,例如:

Account, Home, Person 
+1

ASP.Net MVC已經在這樣做,(即它的控制器名稱是如何被發現),如果你能充分利用其在MVC當前實現它可能會爲您節省一些時間。 – 2009-07-20 06:00:03

+1

這是一個很好的問題 - 我該怎麼做? – 2011-02-25 16:27:45

回答

-1

在每個控制器創建屬性,然後你的名字是這樣的。

+0

這是一個好主意,如果性能是一個問題,那麼你的方式可能是最好的方法(假設你不使用反射來發現實現)。否則,使用反射來獲取實現的類名是最簡單的。 – 2009-07-20 06:03:12

+0

這是正確的感謝分享知識。 – KuldipMCA 2009-07-20 06:24:43

+0

而不是粘貼到每一個控制器,你可以創建自己的控制器類,並讓所有的控制器成爲這個類中的一個,並且你放入它的唯一不在基類控制器類中的是這個ViewName屬性 – 2014-08-26 16:39:42

42

使用Jon's suggestion of reflecting through the assembly,這裏是你可能會覺得有用的代碼段:所有

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; 
    } 
} 
0

誰使用這個崗位更好地閱讀之前這個帖子:using Assembly.GetCallingAssembly() not returns the calling assembly

問題是剃鬚刀視圖作爲獨立的動態程序集,並且您沒有獲得所需的程序集。

亞伊爾

+2

我不會從視圖中調用它,我會傳遞來自我的視圖模型的信息,這樣做可以緩解您的問題。 – 2012-08-21 09:30:01

相關問題