Вопрос по c#, asp.net – Найти элемент управления в asp: ретранслятор по событию нажатия кнопки

10

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

<asp:Repeater runat="server" ID="WorkflowListAfter" onitemcreated="WorkflowListAfterItemCreated">
    <ItemTemplate>
         <asp:DropDownList ID="ddlWorkflowMembers" runat="server" DataTextField="MemberName" DataValueField="MemberID">
    </ItemTemplate>
</asp:Repeater>

protected DropDownList ddlWorkflowMembers = new DropDownList();
protected void WorkflowListAfterItemCreated(object sender, RepeaterItemEventArgs e)
{
    ddlWorkflowMembers = (DropDownList) e.Item.FindControl("ddlWorkflowMembers");
}
protected void BtnSaveClick(object sender, EventArgs e) {
    if (ddlWorkflowMembers.SelectedItem == null) return;
}

приведенный выше код работает в первый раз, но после обратной передачи ddlWorkflowMembers всегда имеет нулевое выражение.

нет. только на WorkflowListAfterItemCreated () {...} mhesabi
Ты делаешьWorkflowListAfter.DataBind() после обратной передачи? Sergey Rybalkin

Ваш Ответ

1   ответ
21

BtnSave также внутри ретранслятора.

Вы получаетеRepeaterItem нажатием кнопкиNamingContainer, Тогда вы можете использоватьFindControl чтобы получить ссылку на вашDropDownList:

protected void BtnSaveClick(object sender, EventArgs e) {
    var btn =  (Button)sender;
    var item = (RepeaterItem)btn.NamingContainer;
    var ddl =  (DropDownList) item.FindControl("ddlWorkflowMembers");
    // ...
}

Если кнопка находится за пределами повторителя, и вы хотите сохранить все элементы, вам нужно перебрать все:

protected void BtnSaveClick(object sender, EventArgs e) {
    foreach(RepeaterItem item in WorkflowListAfter.Items)
    {
        var ddl =  (DropDownList) item.FindControl("ddlWorkflowMembers");
        // ...
    }       
}

Похожие вопросы