Dnes jsem se dost namořil s následujícím problémkem:
V jednom ASP.NET 2.0 projektu jsem měl GridView a v něm obyčejný BoundColumn, který zobrazoval hodnotu typu DateTime.
Nechtěl jsem zobrazovat celé datum a čas, ale jen datum a tak jsem se jal sloupec formátovat klasickou cestou - přidáním atributu DataFormatString a formátovací zkratky "d" pro ShortDateFormat.
Řádek vypadal následovně:
<asp:BoundFieldDataField="DtPlanedStart" HeaderText="Termín" SortExpression="DtPlanedStart" DataFormatString="{0:d}">
Leč výstup v GridView byl neformátovaný, ať jsem psal za dvojtečku cokoliv.
Naštěstí jsem našel odpověď v tomto článku - .NET 2.0 implicitně každý výstup z databáze HTML-encoduje, zřejmě aby předešel případným HTML-injection útokům.
No a encodovanou hodnota už nedokázal zformátovat.
Protože vím, že data v daném sloupci pocházejí z typované proměnné, která má vždy datetime hodnotu (a kudy tedy žádná "injekce" neproleze), mohl jsem si dovolit vyřešit tento problém prostým vypnutím HTML-encodování nad daným sloupcem:
<asp:BoundField DataField="DtPlanedStart" HeaderText="Termín" SortExpression="DtPlanedStart" DataFormatString="{0:d}" HtmlEncode="false" >