NoviceToDotNet
NoviceToDotNet

Reputation: 10815

How to define hyperlink click event on the fly?

I am stuck on something: I am creating a hyperlink at runtime that has a navigation URL. I need to define its click event so that I can save a few values to the database. I did something like below but without success.

Could you please suggest an alternative?

protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e) {
  if (e.Item is GridDataItem) {
    HyperLink link = (HyperLink)gridDataItem["ContentTitle"].Controls[0];
    link.ForeColor = System.Drawing.Color.Navy;
    link.ToolTip = Common.grdTextCell(gridDataItem["ContentSummaryDescr"].Text);
    link.NavigateUrl = "~/SomePath/" + gridDataItem["ContentName"].Text;
    link.Target = "_blank";
    link.Attributes.Add("onclick", "document.getElementById('" +
      dummyBtn.ClientID + "').click();");
  }
}

protected void dummyBtn_Click(object sender, EventArgs e) {
}

But the button click event is not firing, it simply navigates to the URL. What to do please?

Upvotes: 2

Views: 827

Answers (3)

Peru
Peru

Reputation: 2971

You should be using Link Button. Just replace your Hyperlink with LinkButton in your code.It should work.

protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e) {
  if (e.Item is GridDataItem) {
    LinkButton link = (LinkButton )gridDataItem["ContentTitle"].Controls[0];
    link.ForeColor = System.Drawing.Color.Navy;
    link.ToolTip = Common.grdTextCell(gridDataItem["ContentSummaryDescr"].Text);
    link.NavigateUrl = "~/SomePath/" + gridDataItem["ContentName"].Text;
    link.Target = "_blank";
    link.Click += dummyBtn_Click;

  }
}

protected void dummyBtn_Click(object sender, EventArgs e) {
}

Upvotes: 1

royse41
royse41

Reputation: 2368

You want a LinkButton, not a HyperLink.

Here's some sample code to get you started (not tested)

protected void RadGrid1_ItemDataBound(object sender, GridItemEventArgs e)
{
    if (e.Item is GridDataItem)
    {
        LinkButton link = (LinkButton)gridDataItem["ContentTitle"].Controls[0];
        link.Click += dummyBtn_Click;
    }
}

protected void dummyBtn_Click(object sender, EventArgs e)
{
    Response.Write("dummyBtn_Click");
}

Upvotes: 1

V4Vendetta
V4Vendetta

Reputation: 38220

For a server side event to fire you would need a LinkButton and not a HyperLink

LinkButton has a Click event handler which you can use.

HyperLink only redirects and has no corresponding Click event handler associated for server side code

Upvotes: 3

Related Questions