Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: .NET
Expertise: Intermediate
Nov 11, 2009

ASP.NET Workaround: Calling a JavaScript Function from a HyperLinkField in a GridView

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:");
      }
   }
}
Srinath MS
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap