Logo UGIdotNET

Usare la proprieta' DataFormatString in un BoundField in ASP.NET 2.0

Dopo aver settato la proprieta' DataFormatString per un BoundField in una GridView in ASP.NET 2.0, il valore che viene mostrato quando la pagina e' renderizzata non e' formattato come dovrebbe.

Per esempio per una colonna di tipo Date, settando DataFormatString="{0:d}", la data dovrebbe essere mostrata come data corta nel formato "dd/mm/yyyy", ma invece e' mostrata come "dd/mm/yyyy hh:mm:ss".

Questo succede perche il valore del campo e' passato alla funzione HTMLEncode prima di essere formattato, quindi la formattazione essendo fatta su un campo gia "encoded" non funziona.

In ASP.NET infatti l'encoding e' abilitato di default su tutti i campi, per evitare problemi tipo il Cross-Site Scripting (XSS).

La soluzione al problema, e' di settare la proprieta HtmlEncode del BoundField a False:

<asp:BoundField DataField="DateAdded" DataFormatString="{0:d}" HtmlEncode="False" />

Avendo disabilitato l'encoding, e' necessario verificare manualmente che il dato non contenga caratteri non permessi.

Informazioni dettagliate sul Cross-Site Scripting in ASP.NET si possono trovare qui:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnaspp/html/scriptingprotection.asp
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/paght000004.asp

Autore: Michele Bersani
Data: 13 febbraio 2006
Ultimo aggiornamento: 13 febbraio 2006
Categorie:  ASP.NET

© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185