如何动态定义超链接点击事件?

时间:2012-07-13 09:25:46

标签: c# asp.net radgrid

我被困在某事上:我在运行时创建了一个带有导航URL的超链接。我需要定义它的click事件,以便我可以将一些值保存到数据库中。我做了类似下面的事但没有成功。

你能建议一个替代方案吗?

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) {
}

但按钮点击事件未触发,它只是导航到URL。该怎么办?

3 个答案:

答案 0 :(得分:3)

要解决服务器端事件,您需要LinkButton而不是HyperLink

LinkButton有一个Click事件处理程序,您可以使用它。

HyperLink仅重定向,并且没有与服务器端代码相关联的相应Click事件处理程序

答案 1 :(得分:1)

你想要一个LinkBut​​ton,而不是HyperLink。

以下是一些示例代码,可帮助您入门(未经测试)

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

答案 2 :(得分:1)

您应该使用链接按钮。只需在代码中用LinkBut​​ton替换你的超链接。它应该可以工作。

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) {
}