繁体   English   中英

在按钮点击事件中查找asp:repeater中的Control

[英]Find Control in asp:repeater on button click event

我在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总是为null expersion。

假设BtnSave也在转发器内部。

通过强制转换按钮的NamingContainer获得RepeaterItem 然后,您可以使用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");
        // ...
    }       
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM