Нахождение динамически добавленного элемента управления на странице ASPX - PullRequest
0 голосов
/ 15 декабря 2010

У меня есть страница asp "A", и я создал пользовательский элемент управления "B"

Когда я делаю A.Controls.Add (B), я хотел бы создать элемент, скажем,TableRow, который определен внутри элемента управления "B", невидим для кода позади.

При просмотре элементов управления "A" я не могу найти эту строку таблицы.

Есть какие-либо подсказки?

Я уверен, что это что-то очень простое, что мне не хватает.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 15 декабря 2010

Вы должны выставить элементы управления, которые могут быть изменены и доступны извне, как свойства. MSDN

Но подумайте не о том, чтобы выставить весь контроль целиком, а только о. Text-свойство Textbox, потому что это предотвращает непреднамеренное и непредсказуемое поведение. Пользовательский контроль должен инкапсулировать сложность и должен (в основном) использоваться повторно. Чем больше элементов управления вы предлагаете элементам управления (например, странице), которые используют пользовательский элемент управления, тем меньше их можно использовать повторно и тем больше у них ошибок.

Если, например, вы создали элемент управления Login с текстовым полем для имени пользователя и текстовым полем для пароля, имеет смысл предлагать свойства с именами имя пользователя и пароль вместо возврата самих текстовых полей. Каждое свойство возвращает соответствующее значение Textbox-Text.

В вашем примере с TableRow, какова его цель? Вы должны предоставить свойство со значимым именем для управления его видимостью (например, ShowTitle, если строка содержит заголовок, получатель / установщик вернет / установит фактическое видимое состояние табличной строки).

Конечно, вам нужна ссылка на ваш UserControl, если вы хотите получить доступ к его свойствам. Вы должны предоставить исходный код, если у вас есть проблемы с его поиском на странице. Это зависит от того, где вы создали и добавили его. Обычно вы найдете элементы управления с FindControl в NamingContainer (например, NamingContainer элемента управления, определенного в TemplateColumn GridView, является самим GridViewRow).

1 голос
/ 15 декабря 2010

Мне нравится использовать метод рекурсивного расширения - он отлично работает независимо от вложенности и т. Д. Вы можете взломать его, чтобы вернуть элемент управления с определенным идентификатором.

Param Parent может быть любым элементом управления, включая Webform или UserControl :-)

    //Recursively get all the Controls within parent
    public static IEnumerable<Control> GetAllControls(this Control parent)
    {
        foreach (Control control in parent.Controls)
        {
            yield return control;
            foreach (Control descendant in control.GetAllControls())
            {
                yield return descendant;
            }
        }
    }
1 голос
/ 15 декабря 2010

Вы можете использовать метод FindControl со страницы, чтобы найти конкретный элемент управления по его идентификатору. Я не уверен, что если вы хотите найти добавленный UserControl 'A' или элемент управления внутри него, вам следуетвозможность использовать тот же метод, чтобы найти элемент управления внутри, пока вы знаете Id, и если эта строка таблицы была объявлена ​​через xml, у нее установлен атрибут runat = "server".

надеюсь, это поможет!

...