NiceToMytyuk
NiceToMytyuk

Reputation: 4277

OnClick function on dynamic LinkButton?

I'm creating dynamic LinkButton where I assign to it dynamically an ID now I would be able to write an onClick function where I get that ID but after trying to make something like that I had no result:

  table.Append("<td><asp:LinkButton runat=""server"" class=""edit btn btn-sm btn-default"" ID=" & reader.GetString("id") & " OnClient=""Delete_User""><i class=""fa fa-trash-o"" aria-hidden=""true""></asp:LinkButton></i></a>")

While here is VB.NET code

Sub Delete_User(sender As Object, e As EventArgs)
    Dim clickedBtn As LinkButton = CType(sender, LinkButton)

    MsgBox(clickedBtn.ID)

End Sub

Upvotes: 0

Views: 1010

Answers (1)

Tetsuya Yamamoto
Tetsuya Yamamoto

Reputation: 24957

The LinkButton is a server control and you cannot render it with same way as you render plain HTML tags from code-behind, it will not work as expected. You need to provide HtmlTableCell instance and bind LinkButton control from there, assumed table is defined as HtmlTable:

' this is just a sample event
Protected Sub SomeEventHandler(sender As Object, e As EventArgs)

    Dim table As HtmlTable = New HtmlTable()
    Dim row As HtmlTableRow = New HtmlTableRow()

    ' set the data reader from database here

    Dim cell As HtmlTableCell = New HtmlTableCell()

    Dim linkbtn As LinkButton = New LinkButton()
    linkbtn.ID = reader.GetString("id")                ' setting control ID
    linkbtn.Text = "Delete User"                       ' setting link text
    linkbtn.CssClass = "edit btn btn-sm btn-default"
    AddHandler lnkbutton.Click, AddressOf Delete_User  ' assign event handler

    ' add the control to table cell ('td' element)
    cell.Controls.Add(linkbtn)
    row.Cells.Add(cell)
    table.Rows.Add(row)

    ' other stuff
End Sub

Note that you should provide server-side click event with Click property which associated with OnClick event, not OnClient nor OnClientClick.

Additional note:

MsgBox cannot be used in ASP.NET because it belongs to WinForms, you need to provide JS alert() function to show message box with RegisterStartupScript or RegisterClientScriptBlock:

Sub Delete_User(sender As Object, e As EventArgs)
    Dim clickedBtn As LinkButton = CType(sender, LinkButton)

    Dim message As String = "alert('" & clickedBtn.ID & "');"

    Page.ClientScript.RegisterClientScriptBlock(Me.[GetType](), "MsgBox", message, True)
End Sub

Related issues:

How to add linkbutton control to table cell dynamically

Creating a link button programmatically

How to add dynamically created buttons to a dynamically created table?

Upvotes: 2

Related Questions