Как добавить события во вложенные серверные элементы управления? (ASP.Net) - PullRequest
1 голос
/ 18 мая 2010

Я создаю пользовательский элемент управления типом главной страницы, то есть, как сетка данных, но должно быть проще добавить в него пользовательские функции. Это прекрасно, но часть желаемой функциональности - иметь элемент управления подкачкой, который включает и выключает, а частью этого элемента управления будет текстовое поле, отображающее номер текущей страницы и перенаправляет TextChanged на новую страницу набора данных.

Проблема, с которой я сталкиваюсь, заключается в том, что технически текстовое поле, для которого запускается его событие, встроено в элемент управления, который встроен в элемент управления, который вы фактически помещаете на страницу, вроде

Страница
|
Управление отображением
|
Пейджинговый контроль
|
Textbox

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

Я уже некоторое время бродил по Google и обнаружил, что мне нужно реализовать INamingContainer (готово), и мне нужно добавить элемент управления в дерево элементов управления страницы (слишком ли поздно для этого Pre_Init? Когда хороший время добавить элемент управления на страницу?) тогда событие должно сработать, видимо. Но я не смог найти пример наилучшей практики по этому поводу, есть довольно много случаев, когда люди испытывают тревогу, но это не кнопка.

Так может ли кто-нибудь указать мне, как заставить элемент управления, встроенный в элемент управления, встроенный в элемент управления, добавить на страницу для правильного поведения?

Ответы [ 2 ]

0 голосов
/ 19 мая 2010

Ответ представлял собой комбинацию вышеуказанного ответа и комментария к исходному вопросу. Чтобы событие произошло, важно убедиться, что ваши элементы управления (родительские и дочерние) наследуются от CompositeControl и INamingContainer, например,

public partial myControl:CompositeControl,INamingContainer
etc...

Затем вы переопределяете метод CreateChildControls () вашего составного элемента управления, создаете элементы управления и подключаетесь к ним. Это обеспечит правильное барботирование. и означают, что обработка события происходит под вашим комбинированным управлением ...

0 голосов
/ 18 мая 2010

INamingContainer нужен только в том случае, если вы планируете добавить более одного экземпляра пользовательского элемента управления на одну и ту же страницу. Он позволяет генерировать уникальные идентификаторы, чтобы у вас не было элементов управления с одинаковым идентификатором. Я рекомендую вам наследовать от CompositeControl при создании пользовательского элемента управления. Pre_Init еще не поздно. На самом деле это довольно рано, учитывая жизненный цикл. Вы можете создавать пользовательские элементы управления и добавлять их в коллекцию живых элементов управления во многих местах. Я бы порекомендовал вам сделать это в Page_Init (до загрузки viewstate) или Page_Load (после загрузки состояния просмотра). Даже если вы добавите его позже в жизненном цикле страницы, элемент управления перехватит события. Чтобы подписаться на события дочерних элементов управления, вы можете использовать метод FindControl:

MyControl myControl = Page.FindControl("MyControl1");
TextBox textBox = myControl.FindControl("TextBox1") as TextBox;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...