A Visual Studio szerint kettő. Szerintem egy.
Ha néhány héttel ezelőtt megnézte valaki az MSDN Kompetencia Központ honlapján a cimkefelhő HTML kódját, valami ilyesmit láthatott volna:
<div class="tagContent">
<span id="ctl00_cphMain_TagCloud1_dtlTagCloud">
<span>
<a id="ctl00_cphMain_TagCloud1_dtlTagCloud_ctl00_hypTag"
class="Tag1" rel="tag" href="Tags/.NET">.NET</a>
</span>
<span>·</span>
<span>
<a id="ctl00_cphMain_TagCloud1_dtlTagCloud_ctl02_hypTag"
class="Tag3" rel="tag" href="Tags/Active%20Directory">Active Directory</a>
</span>
<span>·</span>
<span>
<a id="ctl00_cphMain_TagCloud1_dtlTagCloud_ctl04_hypTag"
class="Tag3" rel="tag" href="Tags/ASP.NET">ASP.NET</a>
</span>
<span>·</span>
<!-- stb. -->
Ez bizony némi javításért kiált! Sok benne a felesleges span és sok benne a felesleges id.
A spanektől egyszerű volt megszabadulni: a listát korábban egy DataList vezérlő állította elő adatkötéssel, ez viszont köztudottan telespaneteli a kimenetet. Átírtuk ListViewra és tada, megszűnt ez a probléma.
A másik érdekesség a gusztustalanul sok és hosszú ID. Ezektől sem nehéz megválni: ne adjunk a szerver oldali vezérlőnek ID attribútumot! Nem kell neki! Gondoljuk csak végig, hogy miért van az ID? Hogy azonosítani tudjuk a vezérlőt, amikor code behindból hivatkozunk rá. Ha nincs code behind, nem kell az ID!
Kérdés persze, hogy okoz-e az ASP.NET-nek gondot, ha nincs ID? Ehhez csak meg kell keresnünk Reflectorban a System.Web.UI.WebControls.WebControl osztály AddAttributesToRender metódusát, ez felelős ugyanis ennek az attribútumnak a HTML markupba generálásáért:
protected virtual void AddAttributesToRender( HtmlTextWriter writer )
{
if( this.ID != null )
{
writer.AddAttribute( HtmlTextWriterAttribute.Id, this.ClientID );
}
//...
}
Látható, hogy nem repül kivétel, ha a this.ID null, csak éppen nem történik semmi.
Amikor Visual Studioban behúzok egy vezérlőt a Toolboxról, a nagyokos azt hiszi, hogy majd biztosan programozni szeretném, ezért ad neki rögtön ID és runat=”server” attribútumokat. Ebből egyedül a runat=”server” kell, az ID nem! Sajnos a webfejlesztő dolga, felelőssége, kötelessége, hogy a felesleget törölje a markupból.
Az ID törlése után ez maradt a cimkefelhőnkből:
<div class="tagContent">
<a class="Tag1" rel="tag" href="Tags/.NET">.NET</a>
·
<a class="Tag3" rel="tag" href="Tags/Active%20Directory">Active Directory</a>
·
<a class="Tag3" rel="tag" href="Tags/ASP.NET">ASP.NET</a>
·
<!-- stb. -->
Miután töröltük a felesleges HTML tageket és attribútumokat, a cimkefelhő HTML markupja a harmadára csökkent.
Szerintetek érdemes erre figyelni, fontos ez?