Получение фактических данных поля из выражения Linq - PullRequest
2 голосов
/ 13 сентября 2011

Я работаю над приложением ASP.NET MVC3 и аннотировал свою модель атрибутом, который указывает, какие роли могут изменять определенные поля для любого возможного состояния, в котором находится модель. Возьмем это как пример:

public class Model
{
   [RoleLimiter(
     new[]{Role.Admin, Role.BasicUser, Role.Validator}, // for draft
     new[]{Role.Admin, Role.BasicUser, Role.Validator}, // for awaiting validation
     new[]{Role.Admin})]                                // for published etc
   public string Subject {get;set;}
}

Это выглядит немного грязно, конечно, но это очень легко изменить при необходимости.Теперь, когда у меня есть это, легко проверить для каждого поля текущий статус, а затем получить список ролей, которые могут его изменить.Если текущей роли в нем нет, я добавлю класс disabled к элементу управления.

Далее я хотел бы создать расширение HtmlHelper, имеющее тот же синтаксис, что иобычный EditorFor (или даже прямой TextBoxFor), но делает эту дополнительную проверку и автоматически добавляет атрибут за сцену, но я застрял при получении информации о поле из выражения, то есть:

Как перейти от

HtmlHelper.TextBoxWithRoleLimitationsFor(x=>x.Subject);

к атрибуту, прикрепленному к x.Subject?

1 Ответ

2 голосов
/ 13 сентября 2011

Вы получаете LambdaExpression.Body и проверяете, является ли это MemberExpression. Затем вы можете получить Member из MemberExpression и получить пользовательские атрибуты из этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...