问题
My goal is to create a custom attribute like System.ComponentModel.DataAnnotations.Display wich allows me to pass a parameter.
Ex.: In System.ComponentModel.DataAnnotations.Display I can pass a value to the parameter Name
[Display(Name = "PropertyName")]
public int Property { get; set; }
I want to do the same but in controllers and actions like below
[CustomDisplay(Name = "Controller name")]
public class HomeController : Controller
and then fill a ViewBag or ViewData item with its value.
Can someone help me with this?
Thanks.
回答1:
This is very simple
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);
}
}
Then you can use it in your controller as below
[ControllerDisplayName(Name ="My Account Contolller"])
public class AccountController : Controller
{
}
And in your view you can automatically use it with @ViewData["ControllerDisplayName"]
来源:https://stackoverflow.com/questions/39770432/passing-custom-parameter-in-custom-attribute-asp-net-mvc