Scott Hanselman

IE10 and IE11 and Windows 8.1 and __doPostBack

October 19, 2013 Comment on this post [50] Posted in ASP.NET | Blogging
Sponsored By

A while back there was a bug in the old browser definition files that shipped with .NET 2 and .NET 4. Fast forward to today and these older ASP.NET’s will mis-detect IE10 and IE11. If you have this, you'll see __doPostBack JavaScript errors in your sites when IE10 or IE11 hit them.

However, I'm still getting email from folks who are seeing this, which means they've got very unpatched installations.

Aside: If you don't have this two year old patch, be sure to check out what other updates your server is missing. Again, rollups like .NET 4.5 and "hotfix rollups" get you the latest in one swoop.

Here’s all the internal details for this fix across every combo of framework and OS if you can’t get .NET 4.5. You may want to run "aspnet_regbrowsers -i" after installing the fix if you're having trouble.

  • 2836939 .NET 4 - Win7SP1/Win2K3SP2/Win2K8R2SP1/Win2K8SP2/VistaSP2/WinXPSP3
  • 2836940 .NET 3.5 SP1 - Win2K3SP2/Win2K8SP2/VistaSP2/WinXPSP3
  • 2836941 .NET 2.0 SP2 - Win2K3SP2/WinXPSP3
  • 2836942 .NET 3.5 SP1 - Win7SP1/Win2K8R2SP1
  • 2836943 .NET 2.0 SP2 - Win7SP1/Win2K8R2SP1
  • 2836945 .NET 2.0 SP2 - Win2K8SP2/VistaSP2
  • 2836946 .NET 2.0 SP2 - Win8RTM/WinRTRTM/Win2K12RTM
  • 2836947 .NET 3.5 SP1 - Win8RTM/WinRTRTM/Win2K12RTM

You really shouldn’t be "sniffing" browsers, you should check for the existence of features in your browser. There have been a number "mobile browser" files, including one I used 4 years ago.

If you are using a custom browser definition file (and perhaps forgotten about it) you may STILL see a problem with IE10 or IE11 because you've got your own overriding custom browser sniffing regexes in there. Either remove the need for a browser definition file (ideal) or open up your custom file and remote the IE portion.

TL;DR Version

  • DO - Keep your Web Servers patched.
  • DO - Upgrade to ASP.NET 4.5 if you can.
  • DON'T - Use old Custom Browser Definition Files from years ago and expect them to work

Hope this helps.


Sponsor: Thanks to Red Gate for sponsoring the feed this week! Check out a simpler way to deploy with Red Gate’s Deployment Manager. It can deploy your .NET apps, services, and databases in a single, repeatable process. Get your free Starter edition now.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

facebook twitter subscribe
About   Newsletter
Hosting By
Hosted in an Azure App Service
October 19, 2013 4:27
The problem with the Framework update is its dependency to Windows version. Especially with the .Net Framework 4.5 not available for older Windows server boxes.
October 19, 2013 4:29
I hear you, but how far back should it go? Windows Server 2003 was 10 years ago.

http://msdn.microsoft.com/en-us/library/5a4x27ek.aspx
October 19, 2013 8:29
And if you are still using .NET 1.1, this ended support in October 2013, except if you are running it on Server 2003.
October 19, 2013 9:28
Is this related to the ImageButton issue in IE10 which causes server-side crashes?
October 19, 2013 10:53
I had those issues when playing with the VS 2013 Beta. None of the fixes you mentioned helped. Solution was to disable browser link. This took a while... However. Seems fixed now.
October 19, 2013 11:56
I hate it when people get all haughty about browser-sniffing and talk about modernizr and jquery feature detection as if that's a real-world solution.

My codebase is riddled with browser detection, and it's nearly all needed to work round specific bugs in specific versions of specific browsers (mostly IE of course). And this isn't all about legacy browsers, the most recent was an IE10 bug.

In this case, it's far clearer and more obvious in the code to use browser detection.
Tim
October 19, 2013 13:39
There is another incompatibility between IE 10 and ASP.NET 4.5.
UpdatePanel render sync formatted response for async PostBacks when IE 10 is used as client.

I wrote this issue to Microsoft Connect. (IE 10 & UpdatePanel incompatibility over .NET 4.5)
They are investigating now.
I uploaded a simple web application there, to show that situation.

I also wrote that to ASP.NET AJAX Forum on official ASP.NET website twice, but they very kindly remove that each time!!!
October 19, 2013 14:59
u'd better put the TL;DR section just after the title ;)
October 19, 2013 15:35
For some of us as ISVs we cannot afford to make the customer buy a newer version of Windows Server. Like Berke above, I am forced to work with Windows Server 2003 and thus code for .Net Framework 3.
It is tough to sell software in Uganda if we also have to get the customer to pay for licensing too. Cloud services would be great for me but unfortunately Azure is not available officially in Uganda like it is in Kenya (JUST NEXT DOOR!!).
Forgive the rant.
October 19, 2013 20:34
Strange, that IE10 and 11 break _doopostback at all. They must have discovered this during testing and decided to go with the breakage.
October 19, 2013 21:38
My quick thoughts about Internet Explorer:
- As a web developer I truly hate IE, I think it should be globally boycotted and eliminated, because I had wasted a lot of time fixing IE bugs (css or js). Every IE version is 'special'. Who wants to maintain a ton of IE versions one worse than other?
- My start-up website will not support IE, in IE I'll just display a message: "This browser is not supported, for best user experience please use a modern browser".
- Usability: what sane browser would ask my grandma' if she wants to use accelerators or other shit?
- I wonder if programmers who develop IE are using IE for their personal browsing. I bet they don't - I mean they must be senior devs and they are hired by Microsoft, so, contrary to popular belief, they must have some brain.

Truly IE hater.
October 20, 2013 0:08
Martin: A ton of IE versions, I agree. But what about only the latest version or two?
October 20, 2013 0:27
@Martin, I use IE for my personal use due to its security and privacy. I am a developer and I am not employed by Microsoft.

I use Firefox and Chrome for testing. Personally, I don't like Chrome because Google's habit of harvesting user information, profiling them and selling it to highest bidders.
October 20, 2013 16:54
@Martin

It is pretty easy to avoid most issues between versions. Use a CSS framework and use jQuery, because they have done already done all the hard works of dealing with compatibility.

Just for the record the jQuery team themselves have said that they had to put in less hacks for IE9 & 10 in jQuery 2.x compared to other browsers.
October 20, 2013 18:06
@John, Does this mean you don't use facebook, twitter, gmail, G+ or any other service as well. They are are harvesting your personal information. Google even harvest what your search terms.

October 21, 2013 1:56
Hi Scott...

"We don't sniff like this anymore"

Can you link to some doco to indicate how you detect on .NET 4.5

We are have a ~lively~ discussion at work regarding adaptive ( server detect and render ) vs responsive (clientside via media queries and feature detection ).

I've argued that server side detection is an inherently flawed concept and it's best to detect features clientside ( ie via Modenizr ).
October 21, 2013 4:25
Robert - You can see all the remaining sniffing (just for capabilities info) at C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsers. We assume everyone has JavaScript, supports Cookies and Tables, etc. It's THAT capability stuff that's "turned off" in the sense that we assume all browsers are Modern Browsers.

Yes, server side is flawed, but can have use in limited scenarios. For example, if a browser supports OGG audio and not MP3, you can serve them the right file.
October 21, 2013 4:34
Parsa - Is this an ImageButton in an UpdatePanel? http://support.microsoft.com/kb/2836939
October 21, 2013 12:40
Hi Scott.
Thanks to your attentions.

Not only ImageButton, but also every event raiser controls.
I read about ImageButton issue.
That issue relates to __doPostBack problem, this is something else and happens on both .NET 4.0 and 4.5.

In my uploaded sample on Microsoft Connect, I put a DropDownList and GridView inside UpdatePanel.
DropDownList should filter GridView's data on SelectedIndexChanged event.
On default IE Document Mode (IE10 or edge), after changing value of DropDownList, when async PostBack has been raised, returned response format is not MS AJAX Friendly and cause error 0x800a139e.

I think there are some issues in "ASP.NET AJAX Client Library 4.x" when run on IE 10.
(maybe on "browser capabality detection" and "UpdatePanel back-end")

I apologize, I am not good in English.
October 21, 2013 14:04
It looks to me that my copy of IE11 is presenting "Mozilla" as Request.Browser.Browser and not "IE" which seems a bit strange - and makes life a tad difficult when the only filter is IE or not IE
October 21, 2013 15:41
We ran into the same problem but even after patching our .NET 2 and .NET 4 sites, the problem persisted. After boot-strapping the web.config, we found out that the problem was two-fold in that a reference to browsercaps.config (long deprecated) was still causing confusion. Removing that paired with the patch did the trick.

Moving to .NET 4.5 would be helpful, but the Windows 2003 dependency is an all-too-real one in my organization as well, unfortunately, limiting us to .NET 4. Enterprises can be slow-moving animals, bound by procedures and inefficiencies that can prevent timely upgrades. It's good that 2003 is not far from being end-of-life. A vulnerable, non-supported setup causes security concerns that tend to accelerate migrations.
October 22, 2013 19:15
Since our customers do serve our web app on older operating systems (an email server application), we are forced for the time being to stay at .Net 4.0. We found a few other things that had to be changed for Internet Explorer 11 to work properly. The __doPostBack issue is only one of the problems.

First, we had to set Page.ClientTarget = "uplevel"; in our base page.

Second, we had to go into web.config and change <authentication><forms> to have cookieless="UseCookies"

Until we did this, Forms authentication and some other features of Asp.Net would not function properly on IE 11.

Systems were properly patched, but only these changes seemed to help.

I understand that Microsoft really wants people to stay up to date on the framework, but sometimes that isn't feasible. Especially with installed web applications that are not hosted in-house, but rather on client systems that we do not control. I agree with Simon. When you have customers that are very large, changing operating systems on servers is a very political endeavor, and can take literally years.

If there is something else we should have done instead of the changes above, I'm all ears. Would really like to know the "right" way to do it.
October 24, 2013 23:05
Thank you for the info!

Unfortunately not all customers have the money (or time for training, IT push back, etc.) to upgrade to new machines all the time, especially when they already spent tons of cash getting their 2003 server up in the fist place - so it is nice that a workaround exists that does not rely on .NET 4.5.
October 24, 2013 23:10
@John: Sorry, but you're crazy if you think MSft isn't also harvesting info. As a test I recently opted out of all my hotmail (or whatever they call it now) settings for sharing information, then changed my location to Cairo, Egypt. Sure enough, I started getting spam mails for hotels in Egypt. Msft sells your info just like everybody else.
October 25, 2013 13:22

I had similar issue with Internet Explorer 11 not detected correctly by .NET 4.0 framework. I would like to share how I've worked around the problem. Installing the suggested patches haven't done the trick so after digging deeper into the issue I found that although http://support.microsoft.com/kb/2836939 patch is installed on the server the browser still have been recognized as Mozilla with version 0.0 on the server. After additional research I've found that in case you have any .browser file in your site's app_browsers folder, the version detected on the server is wrong, namely Mozilla 0.0. To workaround the issue I created a custom .browser file in the app_browsers directory with the following content:

<browsers>
<browser id="IE11" parentID="Mozilla">
<identification>
<userAgent match="Trident\/7.0; rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)?)(?'letters'\w*))(?'extra'[^)]*)" />
<userAgent nonMatch="IEMobile" />
</identification>
<capture>
<userAgent match="Trident/(?'layoutVersion'\d+)" />
</capture>
<capabilities>
<capability name="browser" value="IE" />
<capability name="layoutEngine" value="Trident" />
<capability name="layoutEngineVersion" value="${layoutVersion}" />
<capability name="extra" value="${extra}" />
<capability name="isColor" value="true" />
<capability name="letters" value="${letters}" />
<capability name="majorversion" value="${major}" />
<capability name="minorversion" value="${minor}" />
<capability name="screenBitDepth" value="8" />
<capability name="type" value="IE${major}" />
<capability name="version" value="${version}" />
</capabilities>
</browser>

<!-- Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11,0) like Gecko -->
<browser id="IE110" parentID="IE11">
<identification>
<capability name="majorversion" match="11" />
</identification>

<capabilities>
<capability name="ecmascriptversion" value="3.0" />
<capability name="jscriptversion" value="5.6" />
<capability name="javascript" value="true" />
<capability name="javascriptversion" value="1.5" />
<capability name="msdomversion" value="${majorversion}.${minorversion}" />
<capability name="w3cdomversion" value="1.0" />
<capability name="ExchangeOmaSupported" value="true" />
<capability name="activexcontrols" value="true" />
<capability name="backgroundsounds" value="true" />
<capability name="cookies" value="true" />
<capability name="frames" value="true" />
<capability name="javaapplets" value="true" />
<capability name="supportsCallback" value="true" />
<capability name="supportsFileUpload" value="true" />
<capability name="supportsMultilineTextBoxDisplay" value="true" />
<capability name="supportsMaintainScrollPositionOnPostback" value="true" />
<capability name="supportsVCard" value="true" />
<capability name="supportsXmlHttp" value="true" />
<capability name="tables" value="true" />
<capability name="supportsAccessKeyAttribute" value="true" />
<capability name="tagwriter" value="System.Web.UI.HtmlTextWriter" />
<capability name="vbscript" value="true" />
</capabilities>
</browser>
</browsers>

Similar approach is suggested on the following article: doPostback failing in IE 11+ Windows 8.1

I would like to clarify that the issue is happening only with .NET 4.0, while with .NET 4.5 the browser and its version are detected correctly.

Best Regards, Mihail
October 28, 2013 2:58
"Windows Server 2003 was 10 years ago"
It may have been first released 10 years ago, but SP2 was 2007 (6 years ago).

Not only that, projects that started on or before 2008 were most probably using Server 2003.2. These projects were probably completed in 2009/10 - and we don't change OS half-way through development.

Welcome to the real world.
October 28, 2013 15:50
Mihail's suggestion is very helpful. Works for me (at least as a temp solution).
November 06, 2013 19:13
We had to use aspnet_regbrowsers -i after installing 4.5.1 on Windows Server 2008 with IIS7 and a web application that uses .NET Framework 4.0. We already had installed the patch but didn't work for IE11.
November 07, 2013 18:49
Hi, We have tried to install hot fix in our servers, as we are facing the IE10 problem. Our server is "Windows server 2008 SP1" and .Net framework 3.5. The installation wizard says "This update does not apply to your system". We can't find the correct hot fix. Any help would be appreciated!
November 08, 2013 13:35
Windows Server 2003 solution

http://stackoverflow.com/a/19855256/1297563
November 18, 2013 19:26
Hi,

we want to support .NET 2.0 on Mozilla but could not find Mozilla.browser file in the hotfix. could you please provide the file if missing or guide us on how to modify.

Thanks.
November 19, 2013 5:49
I'm on Windows 7 .NET 4.0 developing with VS 2010 and the patch for "backward-fix to all versions of ASP.NET on all OSs" doesn't work.

I'm not doing any browser sniffing, but the ASP.NET controls like linkbutton seem to be doing that.

Surely Microsoft could have released a new patch with IE11 in order to get their own browser working with their own web framework?
November 19, 2013 6:32
My mistake I just needed to reboot and the patch does indeed work.
November 19, 2013 17:09
Sorry. We got the comment "The FireFox issue doesn't exist on .NET 2.0.".
my bad.

Thanks!
November 20, 2013 18:02
Hi Scott,
I've been playing with putting a .Net site behind a CloudFront CDN. Turns out that they always rewrite the user-agent to be 'Amazon CloudFront', consequently no post-backs on my site!

Interesting huh...
November 25, 2013 4:37
Hi Scott,
Thanks for always sharing fruitful tips. My asp.net 4.0 application is heavily using ajax toolkit 4.0. It was completely working till IE10. But now in IE11 it's completely down. Nothing is working under update panel.
So what's the solution?
Thanks
November 28, 2013 4:20
Hi Scott,

I am trying to get ASP.NET 4 to work properly with Chrome/27.0.1453.94. If I use browser capability detection then it is treated as a down level browser even though I can see all the uplevel settings in Request.Browser.

If I set page.ClientTarget to uplevel then javascript, __dopostback, and css all function correctly but the Request.Browser capabilities show IE settings not Chrome settings.

Is there a way to separate the setting of clientTarget as uplevel from the BrowserCapabilities loaded into Request.Browser object? or perhaps a way to reload Request.Browser afterwards?
November 29, 2013 19:11
+1 thanks to Mihail which worked for me as my hosting company (strangely?) refused to consider patching. As alluded to by Maxim however, is this a longer term solution or will we need to revisit?
December 02, 2013 12:03
Scott,

Do you have anything to add onto Mihail's post? I am seeing what he is describing. The patch does not work for me and Mihail suggests this can happen if there are other browser files in the App_Browsers folder (this is true).

I do not want to use the custom browser file he has suggested as I would want to use something more permanent. I can upgrade to .Net 4.5, but as my product is installed at over 200 sites, this is a tricky roll out.

Can you confirm if Mihail is correct or whether this is a bug?

thanks,
December 03, 2013 0:35
I also found Mihail's post to correct for IE 11 after the patch failed to do so.

In regards to non-IE and non-Firfox browsers, the browser detection is working for the simple case but failing when the aspx page is openned from javascript. In the window.open(...) case IE and Firefox are treated as uplevel while Chrome and Safari are treated as downlevel.
December 04, 2013 19:54
Why didn't Microsoft include the browser definition updates in Windows updates concurrently with releasing the breaking changes in IE10 & IE11? They should certainly do so going forward.

They have cause considerable frustration and harm to customers using ASP.Net websites, as well as heaping trouble and scorn on the developers supporting ASP.NET. This is further damaging Microsoft's reputation at a point in the markets (OS, browser, and development tools) when they REALLY can't afford it.
December 05, 2013 0:52
So apparently if you have ANYTHING under your product's App_Browsers, it appears to mess up the detection of IE 10 and 11, even if you're patched.

For example, in our product, we had a .browser file for CriOS. Had nothing to do with IE, but the sheer presence of the file caused IE detection to fail under ASP.Net 4.0.

Funny thing is that the same code is running on two different servers. Both with fully patched systems and with the hotfix installed as well. Both were rebooted, had aspnet_regbrowsers -i run, then rebooted again. One system failed when the crios.browser file existed, and one succeeded.

Deleting the app_browsers directory completely solved the problem for us on both machines.

Anyways, maybe this will help someone.
December 06, 2013 15:46
Hello,

I would like to make a small correction to the regular expression that detects Internet Explorer browser in my previous post. Actually it doesn't match the user agent of IE11 on touch devices so it might be replaced with the following one:
<userAgent match="Trident/(?'layoutVersion'[7-9]|0*[1-9]\d+)(\.\d+)?;(.*;)?\s*rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)))" />

The approach is also described at the following thread:

http://www.telerik.com/community/forums/aspnet-ajax/general-discussions/incorrectly-rendered-webpage-when-using-internet-explorer-11.aspx

Best Regrads,
Mihail
December 11, 2013 21:50
There once was a time when assuming an unrecognized browser had the lease amount of features made sense. In my opinion this time is passed and the ASP.NET team would be doing EVERYBODY a favor if they would reverse this assumption and treat unrecgonized browsers as fully capabable. Then let administrators add definitions for supporting older limited browsers where these are not already in the recognized list.
December 13, 2013 1:01
The problem is with the userAgent string sent by IE 11 where Dot Net 4.0 frameworks or below do not recognize as Internet Explorer. You can fix this problem by upgrading your server to Dot Net 4.5 this will place a new ie.browser file in the

%windir%\Microsoft.NET\Framework\v4.0.30319\Config\Browsers

Alternatly you can add add an ie.Browser file in your web application within the folder App_Browsers with the following entry

<browser id="InternetExplorer" parentID="Mozilla">
<identification>
<userAgent match="Trident/(?'layoutVersion'[7-9]|0*[1-9]\d+)(\.\d+)?;(.*;)?\s*rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)))" />
<userAgent nonMatch="IEMobile" />
<userAgent nonMatch="MSIE " />
</identification>

<capabilities>
<capability name="browser" value="InternetExplorer" />
<capability name="version" value="${version}" />
<capability name="majorversion" value="${major}" />
<capability name="minorversion" value="${minor}" />
<capability name="layoutEngine" value="Trident" />
<capability name="layoutEngineVersion" value="${layoutVersion}" />
<capability name="type" value="InternetExplorer${major}" />
</capabilities>
</browser>
January 09, 2014 17:09
We've installed the 4.5 framework on two separate Windows 2008 R2 machines, and neither installation made browser definition file changes. Does anyone have a suggestion on what to do in this case?
January 09, 2014 18:09
Never mind! On the two machines in question I used the Web Platform Installer to install 4.5. On a third and forth, I installed via Windows Update. Both those machines updated the browser file definitions correctly. Not sure if this is just a coincidence or the version on Web Platform is incorrect.

I then copied my browser definitions to the other two servers and ran aspnet_regbrowsers -i and all appears to be working correctly now.
January 13, 2014 15:19

<tr>
<td>
<asp:TextBox ID="txtUsername" runat="server" Text=""
AutoCompleteType="Disabled" CssClass="WaterMarkedTextBox"
TabIndex="1" autocomplete="off" ontextchanged="txtUsername_TextChanged" AutoPostBack="true">
</asp:TextBox>

</td>
<td>
<asp:Label ID="Lbluser" runat="server" Style="color: Red; font-family: Verdana;
font-size: 15px ; font-weight:bold; position:absolute;" ></asp:Label></td>
</tr>


<tr>
<td>
<asp:UpdatePanel ID="updlocation" runat="server">
<ContentTemplate>
<asp:DropDownList ID="ddlLocation" runat="server"
CssClass="WaterMarkedTextBox2" TabIndex="3">
</asp:DropDownList>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="txtUsername" EventName="TextChanged" />
</Triggers>
</asp:UpdatePanel>
</td>
</tr>


same problem update panel not working in ie10 ……Using the Compatibility View option in the IE10 Tools menu manually update panel work properly…. i dont want change every time Compatibility View
setting …u have solution for this query please revert back..
January 13, 2014 15:25
I filled dropdownlist on the basis of text box change i.e.(inside text change event) in asp.net page using updatepanel to avoid postback its working fine in IE 7,8,9 but its not working on IE 10


January 16, 2014 1:38
The two-year-old patches will fix IE 10, but they will not work on IE 11 because Microsoft has completely changed the user-agent string for IE 11.
Dan

Comments are closed.

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.