byte916
@byte916

Как управлять состоянием полей обьекта через атрибуты?

Используется C#, проект - webforms, задача - управлять видимостью web-control через атрибуты
Если проще - нужно получить доступ к свойству обьекта и поменять у этого свойства свойство:)

Вот есть класс с полем
public partial class Doc1 : BaseDoc{
        [Hide(1)]
        protected DateEdit tbe_DateTo;
}


Есть атрибут
[AttributeUsage(AttributeTargets.Field)]
    public class HideAttribute: Attribute
    {
        public int State { get; set; }

        public HideAttribute(int state)
        {
            State = state;
        }
    }


Пытаюсь изменить свойство поля

public abstract class BaseDoc{
        public void DoFieldManagement()
        {
            var managementsItems = GetType().GetMembers().Where(m => Attribute.IsDefined(m, typeof(HideAttribute))).ToList();

            foreach (var item in managementsItems)
            {
                WebControl control = new WebControl(HtmlTextWriterTag.A);
                if (item is FieldInfo)
                {
                    control = (WebControl)((FieldInfo)item).GetValue(typeof(WebControl));
                }
                var hideAttr = (HideAttribute)item.GetCustomAttributes(typeof(HideAttribute), true).First();

                if (hideAttr.State== 1)
                {
                    control.Visible = false;
                }
            }
}

Почему то в этом методе, в самом начале, в managementsItems попадает пустой массив.
Почему так?

Спасибо)
  • Вопрос задан
  • 170 просмотров
Решения вопроса 1
AlekseyNemiro
@AlekseyNemiro
full-stack developer
Используйте BindingFlags:
var managementsItems = this.GetType().GetMembers
(
  BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public
).Where(m => Attribute.IsDefined(m, typeof(HideAttribute))).ToList();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы