doPostback failing in IE 11+ Windows 8.1

Solution 1:

We have created a new "ie11.browser" file in C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsers and now ASP.NET is working correctly. After creating the file we run "aspnet_regbrowsers -i" and restarted IIS. We simply copied the capabilities of IE6-9. We do not know if this is accurate, but ASP.NET is now working with Explorer 11 running on Windows 8.1 Our ie11.browser file looks like this:

<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>

Solution 2:

I've experienced similar issue and would like to share my findings and how I've resolve it. Straight to the problem: The .NET framework 4.0 doesn't recognize Internet Explorer 11 browser properly. This could be verifyied on a simple web site and a page displaying the browser information from the request by calling:

Request.Browser.Browser

Request.Browser.Version

The result without any patches is: Mozilla 0.0 Once applied the patch mentioned on the following article the browser details become: IE 11.0 However this approach is working correctly on a website that has no custom .browser files. I found that if you have even a single empty file in the system app_browsers folder in your site then the browser and the version become wrong again namely Mozilla 0.0 (although the patch for the .NET 4.0 has been already installed). Digging more in to the issue I managed to workaround this unwanted behavior by including the code provided in the previous post by Sistemas-infoe into a .browser file and put it into the website's app_browsers folder. 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.

I hope this helps.

Best Regards, Mihail

Solution 3:

Its likely that you're tripping over an issue with the browser detection on IIS. Scott Hanselman wrote about this in the past with IE10, and the problem you're having does appear to mirror his description.

A hotfix available at the time, http://support.microsoft.com/kb/2600088, stated:

By default, ASP.NET uses sniffing technology for the user agent string to detect browsers. The browser definition files cover a certain range of browser versions. However, as the version numbers increase, ASP.NET might not recognize new versions of a browser by using the user agent string. In this case, ASP.NET might handle these versions as an unknown browser. For example, ASP.NET cannot recognize Windows Internet Explorer 10 that has the following user agent string:

    Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)

However, this hotfix appears not to apply to IE11 due to a new format of user agent. There is a NuGet package named App_Browsers that may contain a fix, but until then you will have to write your own rule.


MSDN Browser Definition File Schema gives details on how to write a browser detection file; you will find your existing files in C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\Browsers.

According to MSDN Compatibilty Changes in IE11 Preview, the user agent for IE11 in Preview is:

    Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko

which is not recognised by the standard IE regex (hence the problem you're seeing), however the following should work instead:

    Trident\/7.0; rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)?)(?'letters'\w*))(?'extra'[^)]*)

I've not tested it in a live environment, but this does parse the major and minor version correctly, which are key to solving the original problem - try adding this as another match in the file ie.browser.


Note that a similar question was asked on MSDN recently - it may be worthwhile following and contributing to that.

Solution 4:

The Microsoft hotfix '2600088' definitely does NOT work, so you'll have to take the .browser file route.

With the latest version of IE11, you'll need to make a small revision to the ie.browser file RegEx posted by Sistemas-infoe above. Ensure you allow more characters in the UA string between the semi-colon and space. If your RegEx skills are terrible (much like mine), that's a period then a star.

OLD:

<userAgent match="Trident\/7.0; rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)?)(?'letters'\w*))(?'extra'[^)]*)" />

NEW:

<userAgent match="Trident\/7.0;.*rv:(?'version'(?'major'\d+)(\.(?'minor'\d+)?)(?'letters'\w*))(?'extra'[^)]*)" />

You can test if ASP.Net is recognizing the revision and the .browser file using:

Response.Write (Request.Browser.MajorVersion)

If that returns 11, your JS error should be gone. VOILA!

Update:

A second MS patch was released in October 2013. I was able to remove the .browser file now and simply use the patch. So far working well. - See http://support.microsoft.com/kb/2836939