2015-07-20 112 views
-3

設置操作描述是否可行?如果可能的話,我怎樣才能得到描述?在MVC上設置描述屬性

例如:

public class TestingController : Controller 
{ 
    [Description("Description Test")] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 
+0

你對這個描述有什麼不解之處?你期望屬性做什麼?爲什麼你不能使用評論? – CodeCaster

+0

該說明將在哪裏使用? –

+0

我想用它來存儲數據庫,所以我的合作伙伴會知道我對控制器有什麼特別的操作和一些授權的目的,因爲角色將是靈活的 – hartono

回答

0

你能做到這樣,首先,你需要定義一個屬性,然後使用反射提取其信息:

[AttributeUsage(AttributeTargets.All, Inherited = true)] 
    public class DescriptionAttribute : Attribute 
    { 
     private readonly string _title; 
     public string Title 
     { 
      get { return _title; } 
     } 

     public DescriptionAttribute(string title) 
     { 
      _title = title; 
     } 
    } 

    public static class Extensions 
    { 
     public static string GetDisplayName(this MemberInfo target) 
     { 
      return target.GetCustomAttributes(typeof(DescriptionAttribute), true) 
       .Cast<DescriptionAttribute>().Select(d => d.Title) 
       .SingleOrDefault() ?? target.Name; 
     } 
    } 

而且使用這種方式:

public class TestingController : Controller 
{ 
    [Description("Description Test")] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

你可以用這種方式反射提取信息:

var controllers = 
       typeof (MvcApplication).Assembly.GetTypes() 
        .Where(typeof (IController).IsAssignableFrom).Where(method => method.IsPublic && method.IsDefined(typeof(DescriptionAttribute), true)); 
+0

有沒有辦法獲得「描述測試」?我使用typeof(TestingController).GetProperty(「Index」)。GetCustomAttributes(typeof(DescriptionAttribute)),但導致System.ArgumentNullException – hartono

+0

@hartono我已更新我的答案 –