在ASP.NET MVC中是否有一種通過代碼枚舉控制器並獲取其名稱的方法?ASP.NET MVC以編程方式獲取控制器列表
例如:
AccountController
HomeController
PersonController
會給我一個清單,例如:
Account, Home, Person
在ASP.NET MVC中是否有一種通過代碼枚舉控制器並獲取其名稱的方法?ASP.NET MVC以編程方式獲取控制器列表
例如:
AccountController
HomeController
PersonController
會給我一個清單,例如:
Account, Home, Person
您可以通過您的程序集反映並查找從類型System.Web.MVC.Controller繼承的所有類。下面是展示瞭如何做到這一點的一些示例代碼:
http://mvcsitemap.codeplex.com/WorkItem/View.aspx?WorkItemId=1567
我結束了使用這種方法。我也緩存了這個列表,因爲它會經常被重用。謝謝 – DennyFerra 2009-07-20 21:19:57
在每個控制器創建屬性,然後你的名字是這樣的。
這是一個好主意,如果性能是一個問題,那麼你的方式可能是最好的方法(假設你不使用反射來發現實現)。否則,使用反射來獲取實現的類名是最簡單的。 – 2009-07-20 06:03:12
這是正確的感謝分享知識。 – KuldipMCA 2009-07-20 06:24:43
而不是粘貼到每一個控制器,你可以創建自己的控制器類,並讓所有的控制器成爲這個類中的一個,並且你放入它的唯一不在基類控制器類中的是這個ViewName屬性 – 2014-08-26 16:39: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;
}
}
誰使用這個崗位更好地閱讀之前這個帖子:using Assembly.GetCallingAssembly() not returns the calling assembly
問題是剃鬚刀視圖作爲獨立的動態程序集,並且您沒有獲得所需的程序集。
亞伊爾
我不會從視圖中調用它,我會傳遞來自我的視圖模型的信息,這樣做可以緩解您的問題。 – 2012-08-21 09:30:01
ASP.Net MVC已經在這樣做,(即它的控制器名稱是如何被發現),如果你能充分利用其在MVC當前實現它可能會爲您節省一些時間。 – 2009-07-20 06:00:03
這是一個很好的問題 - 我該怎麼做? – 2011-02-25 16:27:45