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

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