A differenza del vecchio asp o del php,
asp.net ha un
modello di sviluppo delle pagine più slegato dall'html. La filosofia di questo modello ha le fondamenta nell'obiettivo di permettere anche agli sviluppatori windows di realizzare applicazioni web, senza avere molta conoscenza delle problematiche di un sito. Ovviamente, per fare un lavoro di qualità, occorre conoscere approfonditamente html e css.
Dal
.net 1.0 Microsoft ha introdotto gli
webcontrol. Sono dei tag propri, in cui il nome del tag ha anteposto un namespace asp:. Questi tag vengono processati lato server e, a seconda dello user-agent che ha richiesto la pagina, possono essere convertiti nell'html che permetta su quel determinato browser una visualizzazione più efficiente.
Dal
.net 2.0 di Microsoft produce durante il rendering tag
XHTML validi.
Se nella pagina è presente un tag
asp:ImageButton avviene un comportamento molto strano. Se guardate l'origine della pagina sul browser è tutto codice
XHTML valido. Se però si va sul
W3C Validator e si mette l'indirizzo della stessa pagina (l'indirizzo, non il codice che abbiamo preso dall'origine) viene fuori un bell'errore.
Dal cappello che ho fatto a questo post si può capire il motivo di questa anomalia.
Il renderer di asp.net produce
XHTML valido se il browser è moderno, tipo Explorer, Chrome, Firefox o Mozilla, mentre se vede
lo user-agent del W3C Validator, produce degli errori. Questo perchè con tutta probabilità il renderer non riconosce quello user-agent e quindi decide di adottare una versione di html più vecchia, la
HTML 4.0 Transitional, che è sicuramente visualizzabile dai browser più vecchi, che potrebbero non digerire
una novità come l'
XHTML.
Quindi se noi siamo di quelli a cui piace mettere sulle nostre pagine il tastino del W3C, che invita a vedere quanto siamo bravi validando il nostro XHTML, faremmo una figura barbina, perchè il validatore riporta un errore che invece non c'è.
A questo punto occorre trovare un
workaround. In effetti ci sono due alternative.
La prima è inserire, nella direttiva page delle pagine che contengono
l'asp:ImageButton, l'attributo
ClientTarget="uplevel" che forza la generazione dei secondo un DOM più sofisticato.
La seconda, che mi piace di più, permette di prendere il toro per le corna e risolvere il problema all'origine. Occorre inserire il seguente codice nel
web.config, all'interno del tag
system.web
<browserCaps>
<case match="W3C_Validator*">
TagWriter = System.Web.UI.HtmlTextWriter
W3CDomVersion = 1.0
</case>
</browserCaps>
Questo codice permette di dire al renderer delle pagine di
riconoscere lo user-agent del W3C Validator e, solo per lui, forzare la generazione di codice
XHTML valido. Indipendentemente da quello che abbiamo messo in pagina. Con qualsiasi evoluzione che ci faremo, non saremo costretti ad andare ogni volta e riverificare la validazione dell'html. Ovviamente a meno che non modifichiamo
noi l'html e ci introduciamo
noi degli errori. Al solito il bug più grosso è l'essere umano. :-)
Dato un numero sufficiente di occhi, tutti i bug vengono a galla. (
Eric Steven Raymond)