Как получить измененное имя класса User Control из кода за C # - PullRequest
0 голосов
/ 30 января 2019

Я создал свой собственный пользовательский элемент управления со свойством CssClass, которое связано с одним из TextBox внутри моего пользовательского элемента управления и имеет некоторый класс по умолчанию.

После создания страницы с этим элементом управления я добавляю другой класс(с jQuery) в мой пользовательский элемент управления.

Чего я хочу добиться, так это получить все имена классов в коде.В настоящее время я получил только имя класса по умолчанию без дополнительного.У меня нет этой проблемы со стандартным веб-контролем.

Если у кого-нибудь есть идеи, как этого добиться?

РЕДАКТИРОВАТЬ:

Небольшое уточнение, чтоЯ хочу достичь: у меня есть UserControl с TextBox, который имеет class = "defaultClass".Я открываю веб-сайт, на котором был обработан мой элемент управления, и вижу, что у моего TextBox есть class = "defaultClass".Затем я нажал какую-то кнопку, которая с помощью JQuery добавила еще один класс в мой TextBox, поэтому после этого у моего TextBox было 2 classes = "defaultClass newClass".В конце я нажимаю кнопку «Завершить», где я собрал все элементы управления со страницы и проверяю каждый из них, содержит ли он класс newClass.Приведенный выше сценарий прекрасно работает с любым веб-элементом управления, но с помощью моего пользовательского элемента управления я вижу только "defaultClass"

код:

foreach (Control ctrl in all)
{
    // Some code
    UserControl usc = ctrl as UserControl;
    if (usc != null) {
        var classes = usc.GetType().GetProperty("[PROPERTYNAME]").GetValue(usc,null).ToString();
        //HERE I GOT ONLY DEFAULT CLASS NAME WITHOUT ADDITIONAL ONE I ADDED BY JQUERY
    }
}


* "all" is a ControlCollection of page.Controls

1 Ответ

0 голосов
/ 30 января 2019

Я немного запутался в том, что вы хотите ...

Если вы хотите получить само имя класса, это

usc.GetType().name

Но в случае, если вам нужен списоквсе свойства в классе UserControl, вы должны запросить весь список.В настоящее время вы запрашиваете только одно конкретное свойство.Поэтому попробуйте:

var classes = usc.GetType().GetProperties();

И если вам просто нужны имена классов, используйте атрибут PropertyType соответствующего свойства.

Другой источник ошибки может быть: ваш jquery производит getter и setter для атрибутов?Если нет, то они не видны «Свойством» , а как « Поле » - вместо этого используется GetFields ().

Вот пример кода для получения свойств:

using System;
using System.Collections.Generic;
using System.Reflection;
using System.Text;

namespace Reflection_Test
{
    class UserControl
    {
        public int test { get; set; } // if no getter/setter is set, this is considered as field, not property
        public bool falsetrue { get; set; } // if no getter/setter is set, this is considered as field, not property
        public UserControl control { get; set; } // if no getter/setter is set, this is considered as field, not property

        public UserControl()
        {
            test = 23;
            falsetrue = true;
            control = this;
        }

        public List<string> GetAttributes()
        {
            PropertyInfo[] temp = this.GetType().GetProperties();
                //this.GetType().GetProperties();
            List<string> result = new List<string>();

            foreach(PropertyInfo prop in temp)
            {
                result.Add(prop.PropertyType.ToString());
            }

            return result;
        } 

    }
}
...