Извлечение дочернего элемента управления из ретранслятора при событии

StackOverflow https://stackoverflow.com/questions/322953

  •  11-07-2019
  •  | 
  •  

Вопрос

У меня есть выпадающий список в элементе управления ретранслятором, а также кнопка.

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

Нашел ретранслятор с помощью:(Метод.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 (как я написал наконец), и там вы можете спросить о любом элементе управления, который находится внутри.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top