Извлечение дочернего элемента управления из ретранслятора при событии
Вопрос
У меня есть выпадающий список в элементе управления ретранслятором, а также кнопка.
Кнопка отключена до тех пор, пока в выпадающем списке не будет выбран допустимый элемент, когда я захочу включить кнопку.К сожалению, я, кажется, не могу до этого добраться.
Нашел ретранслятор с помощью:(Метод.As() является методом расширения для (object as T), просто упрощает приведение)
sender.As<Control>().NamingContainer.Parent.As<Repeater>()
Однако ретранслятор, который я получаю обратно, мне не помогает, поскольку функция FindControl (имя строки) ничего не возвращает - и не показывает ничего полезного в окне просмотра.
Итак, как я могу получить дочерний элемент управления (в данном случае ImageButton) на повторителе из события другого элемента на повторителе (в данном случае DropDown_SelectedIndexChanged)?
Редактировать
Наконец-то я разобрался
sender.As<ImageButton>().NamingContainer.As<RepeaterItem>().FindControl("ControlName")
Решение
Я думаю, у меня есть ответ на ваш вопрос:
1. -Я создаю повторитель с выпадающим списком и кнопкой для выполнения тестов:
<asp:Repeater ID="rp" runat="server">
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" AutoPostBack="true" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
<asp:ListItem>4</asp:ListItem>
<asp:ListItem>5</asp:ListItem>
<asp:ListItem>6</asp:ListItem>
</asp:DropDownList>
<asp:ImageButton ID="Button1" runat="server" Enabled="False" />
</ItemTemplate>
</asp:Repeater>
Я привязываю ретранслятор к данным.
2.-Я создаю метод DropDownList1_SelectedIndexChanged:
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
DropDownList control = (DropDownList)sender;
RepeaterItem rpItem = control.NamingContainer as RepeaterItem;
if (rpItem != null)
{
ImageButton btn = ((ImageButton)rpItem.FindControl("Button1"));
btn.Enabled = true;
}
}
Способ сделать это - спросить элемент управления, кто является его родительским элементом, то есть RepeaterItem , или вы можете использовать NamingContainer (как я написал наконец), и там вы можете спросить о любом элементе управления, который находится внутри.