Search code examples
c#asp.netdatabound

Repeater: javascript to button in itemlist via c#


I've got a repeater with an itemlist, it get's data via C#/sql and a databind. I then want to add onclick javascript to my 'deleteNewsButton' in the itemlist. Im guessing that i have to use OnItemDataBound?

Heres my repeater:

<asp:Repeater ID="newsListRepeater" runat="server" OnItemDataBound="deleteConfirm_Databound">
        <ItemTemplate>
            <tr>
                <td><%# Eval("id") %></td>
                <td><%# Eval("title") %></td>
                <td><%# Eval("tags") %></td>
                <td><%# Eval("author") %></td>
                <td style="width:100px;"><%# DataBinder.Eval(Container.DataItem, "time", "{0:dd/MM/yyyy}") %></td>
                <td style="width:110px;">
                    <asp:Button ID="editNewsButton" runat="server" OnCommand="editNewsButton_Click" CommandArgument='<%# Eval("id") %>' Text="Rediger" />
                    <asp:Button ID="deleteNewsButton" runat="server" CommandArgument='<%# Eval("id") %>' Text="Slet" />
                </td>
            </tr>
        </ItemTemplate>
</asp:Repeater>

EDIT: How would i bind a paramter from behind code, to my 'deleteNewsButton' controllers. It needs to be done from behind code...


Solution

  • I believe for a repeater item databound event you need to use RepeaterItemEventArgs instead of RepeaterItem

    protected void deleteConfirm_Databound(object sender, RepeaterItem e)
    

    becomes

    protected void deleteConfirm_Databound(object sender, RepeaterItemEventArgs e)
    

    You might also want a null check for that control:

    LinkButton button = (LinkButton)e.FindControl("deleteNewsButton");  
    if(button != null) {
        button.Attributes.Add("onclick", "javascript:return " +  
            "confirm('Er du sikker på du vil slette: " +  DataBinder.Eval(e.DataItem, "id") + "')"); 
    }
    

    You may also consider making a common javascript function for the confirm box, and then just calling it from your button.

    aspx

    <script type="text/javascript">
    function confirmFunction(id)
    {
       return confirm('Er du sikker på du vil slette: ' +  id); 
    }
    </script>
    

    codebehind

    LinkButton button = (LinkButton)e.FindControl("deleteNewsButton");  
    if(button != null) {
        button.Attributes.Add("onclick", "javascript:return confirmFunction(" + DataBinder.Eval(e.DataItem, "id") + ");"); 
    }