我希望以人类可读的格式在我的MVC View上显示控制器的当前操作。
我知道您可以通过以下方式获取当前行动的名称:
@ViewContext.Controller.ValueProvider.GetValue("action")
这会返回例如'指数'在下面的例子中
我期待的是:
[DisplayName=Resources.Overview]
public ActionResult Index()
{
return View();
}
然后在页面上打印DisplayName,一些伪代码如:
@ViewContext.Controller.ValueProvider.GetValue("action").GetAttribute("DisplayName")
这将返回'概述'来自资源
这可能吗?
答案 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>