If you place a HyperLinkField in a GridView in an ASP.NET page and link it to a JavaScript function, you’ll find that it doesn’t work properly. The problem is that the URL specified by the HyperLinkField’s NavigateUrl fails to render when you use a JavaScript reference (such as "Javascript:func();") rather than a standard URL.
One possible workaround is to create an item template column containing a hyperlink.
As a workaround, however, you can use the RowDataBoundEvent to prepare a proper call to the JavaScript function. To make this work, developers need to type "Javascript." (with a period) instead of "Javascript:" (with a colon) in the designer.
Here’s an example:
void grid_RowDataBound(object sender, GridViewRowEventArgs e){ //if it is not DataRow return. if (e.Row.RowType != DataControlRowType.DataRow) { return; } //Loop thru the cells changing the "." to ":" in hyperlink navigate URLs for (int i = 0; i < e.Row.Cells.Count; i++) { TableCell td = e.Row.Cells[i]; if (td.Controls.Count > 0 && td.Controls[0] is HyperLink) { HyperLink hyperLink = td.Controls[0] as HyperLink; string navigateUrl = hyperLink.NavigateUrl.ToLower(); hyperLink.NavigateUrl = hyperLink.NavigateUrl.Replace( hyperLink.NavigateUrl.Substring( navigateUrl.IndexOf("javascript."), "javascript.".Length), "javascript:"); } }}