Hány kötelező attribútuma van egy ASP.NET vezérlőnek?

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>&middot;</span>
                    <span>
                            <a id="ctl00_cphMain_TagCloud1_dtlTagCloud_ctl02_hypTag" 
                               class="Tag3" rel="tag" href="Tags/Active%20Directory">Active Directory</a>
                    </span>
                    <span>&middot;</span>
                    <span>
                            <a id="ctl00_cphMain_TagCloud1_dtlTagCloud_ctl04_hypTag" 
                               class="Tag3" rel="tag" href="Tags/ASP.NET">ASP.NET</a>
                    </span>
                    <span>&middot;</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> 
        &middot; 
        <a class="Tag3" rel="tag" href="Tags/Active%20Directory">Active Directory</a> 
        &middot; 
        <a class="Tag3" rel="tag" href="Tags/ASP.NET">ASP.NET</a>
        &middot;
    <!-- 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?

 

Technorati Tags: ,

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s