2016-09-29 2 views
3

내 목표는 System.ComponentModel.DataAnnotations.Display와 같은 사용자 지정 특성을 만들어 매개 변수를 전달할 수있게하는 것입니다. 내가사용자 지정 특성에 사용자 지정 매개 변수를 전달 - ASP.NET MVC

[Display(Name = "PropertyName")] 
public int Property { get; set; } 

내가 동일한 작업을 수행 할 매개 변수의 이름에 있지만 같은 컨트롤러와 액션에 값을 전달할 수 있습니다 System.ComponentModel.DataAnnotations.Display에서

예 : 아래

[CustomDisplay(Name = "Controller name")] 
public class HomeController : Controller 

다음 ViewBag 또는 ViewData 항목에 값을 채 웁니다.

누군가가 도와 줄 수 있습니까?

감사합니다.

+1

로 사용할 수 있습니다

[ControllerDisplayName(Name ="My Account Contolller"]) public class AccountController : Controller { } 

아래 그리고 당신의보기로 컨트롤러에서 사용할 수 있습니다 매우 간단합니다 컨트롤러 유형에서 ['GetCustomAttributes'] (https://msdn.microsoft.com/en-us/library/dwc6ew1d.aspx)를 사용하여'ViewContext.Controller'를 사용하십시오. [this] (http://stackoverflow.com) /문제 s/19412483/mvc3-can-you-controller-a-display-name) –

+0

CustomAttributes가 ViewBag 또는 ViewData에 데이터를 저장할 수 없음 –

+1

[이 답변] (http://stackoverflow.com/questions/2656189/how -do-i-read-at-a-class-at-runtime) 그리고 결과를'ViewBag'에 할당하십시오. –

답변

4

이것은

public class ControllerDisplayNameAttribute : ActionFilterAttribute 
{ 
    public string Name { get; set; } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     string name = Name; 
     if (string.IsNullOrEmpty(name)) 
      name = filterContext.Controller.GetType().Name; 

     filterContext.Controller.ViewData["ControllerDisplayName"] = Name; 
     base.OnActionExecuting(filterContext); 
    } 
} 

그런 다음 당신은 당신이 자동으로 반영해야 @ViewData["ControllerDisplayName"]

+0

고마워요 @Haitham. 몇 분 전에, BaseController의 OnActionExecuting을 사용하여 작동 시켰습니다. 내 수정은 자신의 방식보다 복잡하므로 답변으로 수정하고 있습니다. 그것은 더 우아합니다. –

관련 문제