【问题标题】:How to set metadata for controller and action methods?如何为控制器和操作方法设置元数据?
【发布时间】:2015-02-03 18:46:24
【问题描述】:

我正在使用这段代码来显示所有带有操作方法的控制器名称:

public ActionResult GetAllControllers()
        {
            var controllers = typeof (MvcApplication).Assembly.GetTypes().Where(typeof (IController).IsAssignableFrom);
            return View(controllers.ToList());
        }

查看:

<ul id="treeView">
    @foreach (var item in Model)
    {
            <li>
                @item.Name
                <ul>
                    @foreach (var action in item.GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly).Where(method => typeof(ActionResult).IsAssignableFrom(method.ReturnType)))
                    {
                        <li>@action.Name</li>
                    }
                </ul>
            </li>
    }

</ul>

结果是这样的:

HomeController
     Index
     About
MainController
     Index
     Create
     Edit
     Delete
...

现在我的问题是:有没有办法为控制器和操作方法设置名称作为显示结果?例如这样的:

[SetName("MainPage")]
public class HomeController : Controller
{
    [SetName("ProductList")]
    public ActionResult Index()
    {
        //
    }
    // other action methods
}

所以在这种情况下,显示控制器名称和操作方法的结果将是:

MainPage
   ProductList
... 

【问题讨论】:

  • 我是一个非常流利的 C# 用户,但是你可以使用过滤器来做到这一点。
  • 您可以创建自己的属性并用它们标记您的方法。它们包含的数据可通过您已在使用的反射获得。

标签: c# asp.net-mvc reflection


【解决方案1】:

新建一个属性类,然后通过GetCustomAttributes()方法读取PropertyClass上的属性

【讨论】:

    猜你喜欢
    • 2011-09-05
    • 1970-01-01
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 2011-09-22
    • 2013-06-01
    • 2020-01-22
    • 2012-02-25
    相关资源
    最近更新 更多