3

我正在使用 mvc3。是否可以给控制器和动作一个显示名称。

[DisplayName("Facebook Employee")]
public class EmployeeController : Controller

在我的面包屑中,我将获得控制器名称和动作名称

@{
var controllerName = ViewContext.RouteData.Values["Controller"];
var actionName = ViewContext.RouteData.Values["Action"];
}

我希望看到“Facebook Employee”,但它不起作用。

4

2 回答 2

5

您必须使用GetCustomAttributes. 用于ViewContext.Controller获取对控制器本身的引用。像这样的东西:

string controllerName;
Type type = ViewContext.Controller.GetType();
var atts = type.GetCustomAttributes(typeof(DisplayNameAttribute), false);
if (atts.Length > 0)
    controllerName = ((DisplayNameAttribute)atts[0]).DisplayName;
else 
    controllerName = type.Name;   // fallback to the type name of the controller

编辑

要对一个动作做类似的事情,你需要首先反思这个方法,使用Type.GetMethodInfo

string actionName = ViewContext.RouteData.Values["Action"]
MethodInfo method = type.GetMethod(actionName);
var atts = method.GetCustomAttributes(typeof(DisplayNameAttribute), false);
// etc, same as above
于 2013-10-16T19:57:24.277 回答
0
     public static class HLP
      {

  public static string DisplayNameController(this WebViewPage wvp)
    {
        if (wvp.ViewBag.Title != null && (wvp.ViewBag.Title as string).Trim().Length > 0)
            return wvp.ViewBag.Title;

        ControllerBase Controller = wvp.ViewContext.Controller;
        try
        {
            DisplayNameAttribute[] attr = (DisplayNameAttribute[])Controller.GetType().GetCustomAttributes(typeof(DisplayNameAttribute), false);
            string DisplayName = attr[0].DisplayName; 

            return DisplayName;
        }
        catch (Exception)
        {
            return Controller.ToString();
        }
    }

    public static string DisplayNameAction(this WebViewPage wvp)
    {
        string actionName = wvp.ViewContext.RouteData.Values["Action"].ToString();

        try
        {
            Type type = wvp.ViewContext.Controller.GetType();
            MethodInfo method = type.GetMethod(actionName); 

            DisplayNameAttribute[] attr = (DisplayNameAttribute[])method.GetCustomAttributes(typeof(DisplayNameAttribute), false);
            string DisplayName = attr[0].DisplayName; 
            return DisplayName;
        }
        catch (Exception)
        {
            return actionName;
        }

    }
}



 <title>@this.DisplayNameAction()</title>
于 2017-09-11T16:57:50.533 回答