Saját DataSource paraméter

Épp amikor belefogtam volna, hogy megírjam, hogyan készítünk saját paraméter osztályt, amit aztán a data source osztályainkkal használhatunk, megérkezett a NetAcademia új tippek-trükkök hírlevele, amiben Tocsi lelőtte előlem a lényeget.

Ezt persze értékelhettem volna úgy, mint A Sors Kezét, amely nem akarja, hogy ez a téma megjelenjen a blogomban, de nem teszem, hanem inkább leírom, hogy mi az MSDN Kompetencia Központban hogyan oldjuk meg ezt a problémát.

Tocsinak alapvetően teljesen igaza van, a kulcs az, hogy származtatnunk kell a System.Web.UI.WebControls.Parameter osztályból, hiszen ebből származik a Control-, Cookie-, Form-, Profile-, QueryString- és SessionParameter osztály is.

Mi azt a megközelítést választottuk, hogy olyan általános osztályt hoztunk létre, amely a MembershipUser osztály tetszőleges tulajdonságát át tudja adni paraméterként. Ehhez természetesen definiáltunk az osztályon belül egy string típusú PropertyName tulajdonságot.

A következő lépésben felvérteztük magunkat egy rakás konstruktorral, követve az ősosztály konstruktorainak paraméterezését és felülírtuk a Clone() metódust is.

Az utolsó lépés, hogy új írtuk meg az Evaluate metódust, hogy az a MembershipUser osztálynak azt a tulajdonságát adja vissza, amit a PropertyName tulajdonság meghatároz. Ezt többféleképpen meg lehet fogalmazni, talán az a legegyszerűbb, amit a Microsoft fejlesztői a ProfileParameter.Evaluate() metódusban használtak (éljen a Reflector). Ha nekik jó, nekünk is jó alapon követtük a mintát és mi is a DataBinder.Eval() metódust használtuk:

    protected override object Evaluate( HttpContext context, Control control )
    {
        if( ( context != null ) && ( context.User.Identity.IsAuthenticated ) )
        {
            return DataBinder.Eval( Membership.GetUser(), this.PropertyName );
        }
        return null;
    }

Ezek után nem marad más hátra, mint regisztrálni az osztályt az oldalon és használni a data source vezérlő paraméterei között. Ha például a felhasználó egyedi azonosítóját szeretnénk átadni, akkor a PropertyName legyen "ProviderUserKey".

Vigyázat! Sajnos a Visual Studio data source konfigurációs varázslói nem ismerik fel, ezért időnként szó nélkül kitörlik ezt a paramétert! Mi ezért a biztonság kedvéért szerver oldali kommentben oda szoktuk másolni ezt a tag-et a data source varázsló közelébe.

Akit érdekel az általunk használt osztály teljes forráskódja, írjon ide egy kommentet és szívesen megosztom!

A forráskód letölthető innen: http://www.devportal.hu/Portal/Detailed.aspx?NewsId=a4a48992-8497-4db0-adc9-72435199ed62

 

Technorati tags:
Reklámok

2 thoughts on “Saját DataSource paraméter

  1. Laszlo

    szia Gyuri,tetszik a megoldás és érdekelne kódszinten is a dolog…igazából épp a közelmúltban sikerült egy hasonló problémába ütközni, amikor is guid típusú paramétert szerettem volna átadni a datasource-nak, de sajnos ezt még egyelőre (remélem!) nem tudta, így maradt az a megoldás amikor pl. SqlDataSource1_Updating-ben explicit beállítom ezt a típustez így elég macerás, de hála a blogoknak mindig okosodik az ember :))…köszi előre is

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