In a previous blog entry I talked about skmLinkButton, a simple, open-source enhancement to the built-in ASP.NET LinkButton Web control. skmLinkButton includes properties to display text in the browser's status bar when mousing over the link as well properties to easily add a client-side confirm messagebox when clicking the link.
I recently received an email inquiry in my Inbox from loyal 4Guys reader David P., who asked:
I'm writing to you because I think you may be able to help me. I enjoyed your article about overriding Linkbutton very much, but I have a further need that you may have a solution to. A LinkButton is rendered like <a href="javascript:__doPostBack(.....)" onClick="alert('pressed')">Click me</a>.
My problem is that if I SHIFT+CLICK the LinkButton [or right-click on it and opt to open in a new window], a new window opens [with the JavaScript, javascript:__doPostBack(.....), in the Address bar, resulting in a client-script error and a confused user.] ... I want to avoid that. I've found a solution:
<a href='#' onClick="__doPostBack(....);">Click me</a>
My problem is that I don't know which attribute to modify so that the Href value is moved to the onClick event... It must be done in an inherited control or codebehind.
(To see an example of David's problem, click here. The hyperlink's markup is simply <a href="javascript:var x = 4;" target="_blank">click here</a>. Note that clicking the link opens a new window that displays the JavaScript in the address bar and returns an error. This mimics the behavior of an ASP.NET LinkButton that is clicked to have opened in a new window.)
I tinkered with skmLinkButton to do what David requested. The end result can be read about in this week's 4GuysFromRolla.com article, Stopping JavaScript Errors When Opening a LinkButton in a New Window. There are live demos to tinker around with over at http://scottonwriting.net/demos/skmLinkButtonDemo.aspx. You can download the complete source code, along with an example ASP.NET page and a prec-compiled assembly, at http://aspnet.4guysfromrolla.com/code/skmLinkButton.zip.