[英]Find Control in asp:repeater on button click event
I have a dropdown list inside a asp:repeater item template. 我在asp:repeater项目模板中有一个下拉列表。 how can I get its value on button click event. 如何在按钮点击事件中获得其价值。
<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总是为null expersion。
Assuming that BtnSave
is also inside the repeater. 假设BtnSave
也在转发器内部。
You get the RepeaterItem
by casting the button's NamingContainer
. 通过强制转换按钮的NamingContainer
获得RepeaterItem
。 Then you can use FindControl
to get the reference to your DropDownList
: 然后,您可以使用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");
// ...
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.