C# 在 asp:repeater 中查找控件按钮单击事件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10880297/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-09 15:38:22  来源:igfitidea点击:

Find Control in asp:repeater on button click event

c#asp.net

提问by mhesabi

I have a dropdown list inside a asp:repeater item template. how can I get its value 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;
}

the code above is working at first time but after postback ddlWorkflowMembers is always null expersion.

上面的代码第一次工作,但回发后 ddlWorkflowMembers 始终为空。

采纳答案by Tim Schmelter

Assuming that BtnSaveis also inside the repeater.

假设这BtnSave也在中继器内部。

You get the RepeaterItemby casting the button's NamingContainer. Then you can use FindControlto get the reference to your DropDownList:

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");
    // ...
}

If the button is outside of the repeater and you want to save all items, you need to loop through all:

如果按钮在中继器之外并且您想保存所有项目,则需要遍历所有项目:

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