如何知道Controller在ASP.net中是否具有属性?

时间:2011-12-04 01:34:43

标签: asp.net-mvc view attributes controller action

在视图中,例如,在“_Layout.cshtml”

如何获取调用此视图的控制器/操作?

找到控制器/操作名称后,如何获取它拥有的属性列表?或者测试它是否有属性?

感谢。

2 个答案:

答案 0 :(得分:5)

@ViewContext.Controller将为您提供返回此视图的控制器实例。获得实例后,您将获得类型,一旦获得类型,您将进入Reflection以获取此类型所用的属性。编写自定义HTML帮助程序来执行此作业可能是值得的:

public static class HtmlExtensions
{
    public static bool IsDecoratedWithFoo(this HtmlHelper htmlHelper)
    {
        var controller = htmlHelper.ViewContext.Controller;
        return controller
            .GetType()
            .GetCustomAttributes(typeof(FooAttribute), true)
            .Any();
    }
}

答案 1 :(得分:0)

由于即使在搜索ASP.NET Core版本时,这也是google中的第一个结果,因此以下是在.NET Core中执行此操作的方法:Checking for an attribute in an action filter(请升级原始线程)

        if (controllerActionDescriptor != null)
    {
        // Check if the attribute exists on the action method
        if (controllerActionDescriptor.MethodInfo?.GetCustomAttributes(inherit: true)?.Any(a => a.GetType().Equals(typeof(CustomAttribute))) ?? false)
            return true;

        // Check if the attribute exists on the controller
        if (controllerActionDescriptor.ControllerTypeInfo?.GetCustomAttributes(typeof(CustomAttribute), true)?.Any() ?? false)
            return true;
    }