2013-10-16 45 views
3

我正在使用mvc3。是否有可能給控制器和動作一個顯示名稱。mvc3,你能給控制器一個顯示名稱嗎?

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

在我的麪包屑,我會得到控制器名稱和動作名稱

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

我希望看到「臉譜僱員」,但它不工作。

+0

爲什麼你剛纔設置一個標題?並在視圖中調用標題 – Jorge

回答

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 
+0

非常感謝,它試着做同樣的動作顯示名稱。 ViewContext.Action.GetType(),它不工作。我如何獲得當前的動作類型? – qinking126

+0

@feelexit對於Action而言略有不同 - 請參閱上面的更新。 – McGarnagle

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> 
相關問題