Доступ к CustomAttribute на странице просмотра в mvc3 - PullRequest
1 голос
/ 25 июля 2011

Я создал собственный атрибут 'RoleAction' и добавил к свойству модели

public class RoleActionAttribute : Attribute
{
    public string UserRole { get; set; }

    public RoleActionAttribute(string Role)
    {
        this.UserRole = Role;
    }

}


[RoleAction("Manager")] 
public EmployeeName

Как получить значение RoleAction (Manager) на странице просмотра mvc.

Ответы [ 2 ]

1 голос
/ 25 июля 2011

Вы можете использовать Reflection для извлечения пользовательских атрибутов:

var roleAction = (RoleActionAttribute)typeof(MyViewModel)
    .GetProperty("EmployeeName")
    .GetCustomAttributes(typeof(RoleActionAttribute), true)
    .FirstOrDefault();
if (roleAction != null)
{
    var role = roleAction.UserRole;
}

Другой возможностью является использование метаданных и информирование о пользовательских метаданных атрибутов путем реализации нового интерфейса IMetadataAware , который былвведены в ASP.NET MVC 3:

public class RoleActionAttribute : Attribute, IMetadataAware
{
    public string UserRole { get; set; }

    public RoleActionAttribute(string Role)
    {
        this.UserRole = Role;
    }

    public void OnMetadataCreated(ModelMetadata metadata)
    {
        metadata.AdditionalValues["role"] = UserRole;
    }
}

, а затем:

var metaData = ModelMetadataProviders
    .Current
    .GetMetadataForProperty(null, typeof(MyViewModel), "EmployeeName");
if (metaData != null)
{
    string userRole = metaData.AdditionalValues["role"] as string;
}
0 голосов
/ 25 июля 2011

Вы можете использовать TempData для этого.

...