<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>ASP.NET</title>
        <link>http://cadred.net/blog/category/16.aspx</link>
        <description>ASP.NET</description>
        <language>en-US</language>
        <copyright>Michael Cook</copyright>
        <managingEditor>cadred@cadred.net</managingEditor>
        <generator>Subtext Version 2.0.0.0</generator>
        <item>
            <title>Case of the missing Postback in IE</title>
            <link>http://cadred.net/blog/archive/2008/02/12/case-of-the-missing-postback-in-ie.aspx</link>
            <description>&lt;p&gt;Here's one with a simple solution that took me way longer to figure out than it should have.&lt;/p&gt;  &lt;p&gt;We recently ported our internal intranet over to ASP.NET 2 (I know it's 2008, but it was a big project). For the most part this went smoothly, but a few minor issues appeared. One of these issues was with a custom server control that managed data paging. The control would draw the appropriate number of link buttons, when a button was clicked it generated a postback and called a SelectedPageChanged event to do whatever was required. &lt;/p&gt;  &lt;p&gt;Because this is a custom control, I had to manually wire up the postback event:&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;newLinkBtn.Attributes.Add(&lt;span class="str"&gt;"onclick"&lt;/span&gt;, &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    Page.ClientScript.GetPostBackEventReference(&lt;span class="kwrd"&gt;this&lt;/span&gt;, argument));&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;&lt;style type="text/css"&gt;&lt;![CDATA[






.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;&lt;style type="text/css"&gt;&lt;![CDATA[







.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;This worked great in ASP.NET 1.1, and even after the port worked fine in Firefox and Safari. IE however showed some very strange behavior. It was refreshing the page but nothing was happening, which is very strange considering the code was all server side. There shouldn't have been any differences in browser behavior.&lt;/p&gt;

&lt;p&gt;My first step was to update the code to use the ASP.NET 2 ClientScript tools:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;newLinkBtn.OnClientClick = &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    Page.ClientScript.GetPostBackClientHyperlink(&lt;span class="kwrd"&gt;this&lt;/span&gt;, argument);&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;Which didn't help. Stepping through the debugger, I saw that the page lifecycle was happening twice. The first time everything happened as expected, however the second time, everything defaulted back to the first load. This left me scratching my head for a while (longer than I cared to admit). I wish I could say I came up with the solution myself, but some googling led me to &lt;a href="http://www.msdner.net/asp.net-archived/114/34-1009-1147828.shtm"&gt;this post on msdner.net&lt;/a&gt;.  Simply appending a return statement solved my problem:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;div class="csharpcode"&gt;
    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;newLinkBtn.OnClientClick = &lt;/pre&gt;

    &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    Page.ClientScript.GetPostBackClientHyperlink(&lt;span class="kwrd"&gt;this&lt;/span&gt;, argument);   &lt;/pre&gt;

    &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;newLinkBtn.OnClientClick += &lt;span class="str"&gt;";return false;"&lt;/span&gt;;&lt;/pre&gt;
  &lt;/div&gt;
  &lt;style type="text/css"&gt;&lt;![CDATA[


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;&lt;/div&gt;
&lt;style type="text/css"&gt;&lt;![CDATA[






.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }]]&gt;&lt;/style&gt;

&lt;p&gt;In a nutshell, if you manually wire up a GetPostBackClientHyperLink (or GetPostBackEventReference), it will no longer provide a safety return statement. I could get mad at this behavior, but I see some benefit in being able to chain your own javascript to the PostBack event... if it worked consistently in all browsers. As it is this behavior only cropped up in IE (both 6 and 7), which made it quite a pain to figure out.&lt;/p&gt;&lt;img src="http://cadred.net/blog/aggbug/970.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Michael Cook</dc:creator>
            <guid>http://cadred.net/blog/archive/2008/02/12/case-of-the-missing-postback-in-ie.aspx</guid>
            <pubDate>Tue, 12 Feb 2008 22:17:15 GMT</pubDate>
            <wfw:comment>http://cadred.net/blog/comments/970.aspx</wfw:comment>
            <comments>http://cadred.net/blog/archive/2008/02/12/case-of-the-missing-postback-in-ie.aspx#feedback</comments>
            <wfw:commentRss>http://cadred.net/blog/comments/commentRss/970.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>