2012-06-04 8 views
8

Ich habe eine Dropdown-Liste in einem asp: Repeater Element Vorlage. Wie kann ich seinen Wert auf Button Click Event erhalten.Find Control in asp: Repeater auf Button Klick Ereignis

<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; 
} 

der obige Code wird zum ersten Mal arbeiten, aber nach dem Postback ddlWorkflowMembers ist immer null expersion.

+0

Sind machst du 'WorkflowListAfter.DataBind()' nach dem Postback? –

+0

nein. nur bei WorkflowListAfterItemCreated() {...} – mhesabi

Antwort

20

Angenommen, dass BtnSave auch im Repeater ist.

Sie erhalten die RepeaterItem durch Gießen der Schaltfläche NamingContainer. Dann können Sie FindControl verwenden Sie den Verweis auf Ihre DropDownList zu erhalten:

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

Wenn die Taste außerhalb des Repeaters ist und Sie wollen alle Einzelteile zu speichern, müssen Sie eine Schleife durch alle:

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