在MVC View中获取当前控制器动作的属性

时间:2017-05-02 14:26:37

标签: c# asp.net asp.net-mvc

我希望以人类可读的格式在我的MVC View上显示控制器的当前操作。

我知道您可以通过以下方式获取当前行动的名称:
@ViewContext.Controller.ValueProvider.GetValue("action")
这会返回例如'指数'在下面的例子中

我期待的是:

[DisplayName=Resources.Overview]
public ActionResult Index()
{
    return View();
}

然后在页面上打印DisplayName,一些伪代码如:

@ViewContext.Controller.ValueProvider.GetValue("action").GetAttribute("DisplayName")
这将返回'概述'来自资源

这可能吗?

2 个答案:

答案 0 :(得分:2)

您应首先使用 Type.GetMethodInfo

对方法进行反思
string actionName = ViewContext.RouteData.Values["Action"]
MethodInfo method = type.GetMethod(actionName);
var attribute = method.GetCustomAttributes(typeof(DisplayNameAttribute), false);
if (attribute.Length > 0)
   actionName = ((DisplayNameAttribute)attribute[0]).DisplayName;
else 
   actionName = type.Name;   // fallback to the type name of the controller

然后你可以使用类似

之类的东西将actionName传递给View
   ViewBag.name = actionName;

然后从视图中获取Viewbag变量

答案 1 :(得分:1)

为什么不在Viewbag中设置DisplayName并在代码中为每个需要它的页面检索它?

例如,

public ActionResult Index()
{
    Viewbag.DisplayName = 'Resources.Overview'
    return View();
}

然后在填充DisplayName值的任何视图中,您可以使用以下内容在顶部显示它,

<head>
    @ViewBag.DisplayName
</head>