Alguns WebControls checam diretamente os recursos de que o browser dispõe (browserCapabilities) para decidir a forma com que irão se renderizar.

Ocorre que a informação de BrowserCapabilities é preenchida pelo ASP.NET e nem sempre o ASP.NET consegue reconhecer corretamente o browser do client. Encontrei relatos de problemas com o FireFox, por exemplo.

Para resolver estes casos precisamos atualizar o web.config com um elemento chamado browsercaps. Através deste elemento podemos configurar o ASP.NET para reconhecer novos browsers e indicar ao ASP.NET os recursos disponíveis nestes novos browsers.

Veja um exemplo :

<browserCaps>
<!-- NETSCAPE 6 & 7 -->
<case match="^Mozilla/5\.0 \([^)]*\) (Gecko/[-\d]+ )?Netscape[6|7]/(?version(?major\d+)(?minor\.\d+)(?letters\w*)).*">
tagwriter=System.Web.UI.HtmlTextWriter browser=Netscape version=${version} majorversion=${major} minorversion=${minor} frames=true tables=true cookies=true javascript=true javaapplets=true ecmascriptversion=1.5 w3cdomversion=1.0 css1=true css2=true xml=true
<filter match="^b" with="${letters}">beta=true</filter>
</case>

<!-- MOZILLA -->
<case match="^Mozilla/(?version(?major\d+)(?minor\.\d+)(?letters\w*)).*">css1=true
<!-- is this negating? confirm -->
<case match="^[5-9]\." with="${version}">css2=true tagwriter=System.Web.UI.HtmlTextWriter</case>
</case>

<!-- OPERA 5+ -->
<case match="Opera[ /](?version(?major\d+)(?minor\.\d+)(?letters\w*))">
browser=Opera version=${version} majorversion=${major} minorversion=${minor} frames=true tables=true cookies=true javascript=true ecmascriptversion=1.1
<filter match="[4-9]" with="${major}">ecmascriptversion=1.3 css1=true css2=true xml=true
<filter match="[5-9]" with="${major}">tagwriter=System.Web.UI.HtmlTextWriter w3cdomversion=1.0</filter>
</filter>
<filter match="^b" with="${letters}">beta=true</filter>
</case>
</browserCaps>

Observem como são utilizadas expressões regulares para fazer a identificação do browser. A configuração acima deve ser inserida dentro do System.Web, no Web.Config. Porém, também é possível inseri-la no machine.config de um servidor web, desta forma ela passa a estar ativa em todos os sites deste servidor - tai uma boa dica para provedores.

Podem ver outros exemplos em http://slingfive.com/pages/code/browserCaps/