Megosztás a következőn keresztül:


A DataList és az Repeater formázása adatok alapján (VB)

által Scott Mitchell

PDF letöltése

Ebben az oktatóanyagban példákat mutatunk be arra, hogyan formázzuk a DataList és az Repeater vezérlők megjelenését a sablonok formázási függvényeivel vagy a DataBound-esemény kezelésével.

Bevezetés

Ahogy az előző oktatóanyagban láttuk, a DataList számos stílussal kapcsolatos tulajdonságot kínál, amelyek befolyásolják a megjelenését. Különösen azt láttuk, hogyan rendelhet alapértelmezett CSS-osztályokat a DataList s HeaderStyle, ItemStyle, , AlternatingItemStyleés SelectedItemStyle tulajdonságokhoz. A négy tulajdonság mellett a DataList számos más stílussal kapcsolatos tulajdonságot is tartalmaz, például FontForeColorBackColor, , és BorderWidth, hogy néhányat említsünk. Az Ismétlő vezérlőelem stílussal kapcsolatos tulajdonságokat nem tartalmaz. Az ilyen stílusbeállításokat közvetlenül az Repeater-sablonok korrektúrán belül kell megadni.

Az adatok formázásának menete azonban gyakran magától az adatoktól függ. A termékek felsorolásakor például előfordulhat, hogy a termékinformációkat világosszürke betűszínben szeretnénk megjeleníteni, ha az már megszűnt, vagy ha nulla, akkor érdemes kiemelni az UnitsInStock értéket. Ahogy az előző oktatóanyagokban láttuk, a GridView, a DetailsView és a FormView kétféle módon formázhatja a megjelenésüket az adataik alapján:

  • Az DataBound esemény létrehoz egy eseménykezelőt a megfelelő DataBound eseményhez, amely az adatok minden elemhez való kötése után aktiválódik (a GridView esetében ez volt az RowDataBound esemény; a DataList és az Repeater esetében ez az ItemDataBound esemény). Ebben az eseménykezelőben az éppen kötött adatok megvizsgálhatók, és formázási döntéseket hozhatnak. Ezt a technikát az Egyéni formázás adatok alapján oktatóanyagban vizsgáltuk meg.
  • Formázási függvények a sablonokban , amikor a DetailsView vagy a GridView vezérlők TemplateFields elemét, illetve a FormView vezérlőben lévő sablont használják, formázási függvényt adhatunk hozzá a ASP.NET lap kód mögötti osztályához, az Üzleti logikai réteghez vagy bármely más, a webalkalmazásból elérhető osztálytárhoz. Ez a formázási függvény tetszőleges számú bemeneti paramétert elfogadhat, de vissza kell adnia a HTML-t a sablonban való megjelenítéshez. A formázási függvényeket először a GridView vezérlő sablonmezők használata című oktatóanyagban vizsgáltuk meg.

Mindkét formázási technika elérhető a DataList és az Repeater vezérlőkkel. Ebben az oktatóanyagban példákat mutatunk be, amelyek mindkét vezérlőhöz mindkét technikát használják.

AzItemDataBoundEseménykezelő használata

Ha az adatok adatlistához vannak kötve, akár adatforrás-vezérlőből, akár a vezérlő DataSource tulajdonságához programozott módon hozzárendelt adatokkal, és meghívják annak metódusát DataBind() , a DataList DataBinding eseménye kigyullad, az adatforrás enumerálódik, és minden adatrekord a DataListhez van kötve. Az adatforrás minden rekordja esetében a DataList létrehoz egy DataListItem objektumot, amely ezután az aktuális rekordhoz van kötve. A folyamat során a DataList két eseményt vet fel:

  • ItemCreated a létrehozás után DataListItem aktiválódik
  • ItemDataBound akkor aktiválódik, miután az aktuális rekordot hozzákapcsolták a DataListItem-hez.

Az alábbi lépések a DataList-vezérlő adatkötési folyamatát ismertetik.

  1. A DataList DataBinding eseménye aktiválódik

  2. Az adatok a DataListhez kötődnek

    Az adatforrás minden rekordja esetében

    1. DataListItem Objektum létrehozása
    2. Az esemény kilövéseItemCreated
    3. A rekordot kötni a DataListItem-hoz
    4. Az esemény kilövéseItemDataBound
    5. Adja hozzá a DataListItem-t a Items gyűjteményhez

Amikor adatokat köt az Repeater vezérlőhöz, az pontosan ugyanazon lépéssorozaton halad végig. Az egyetlen különbség az, hogy DataListItem példányok létrehozása helyett a Repeater RepeaterItem-eket használ.

Megjegyzés:

A ravasz olvasó némi anomáliát észlelhetett a lépések sorozata között, amelyek akkor következnek be, amikor a DataList és a Repeater adathoz van kötve, szemben azzal, ha a GridView adathoz van kötve. Az adatkötési folyamat végén a GridView létrehoz egy DataBound eseményt, azonban sem a DataList, sem az Repeater vezérlő nem rendelkezik ilyen eseménysel. Ennek az az oka, hogy a DataList és az Repeater vezérlők az ASP.NET 1.x időkeretben lettek létrehozva, mielőtt az eseménykezelő minta általánossá vált volna.

A GridView-hoz hasonlóan az adatokon alapuló formázás egyik lehetősége egy eseménykezelő létrehozása az ItemDataBound eseményhez. Ez az eseménykezelő megvizsgálná azokat az adatokat, amelyek éppen a DataListItem vagy a RepeaterItem vezérlőhöz voltak kötve, és szükség szerint befolyásolná a vezérlő formázását.

Az Adatlista vezérlőelem esetében a teljes elem formázásának módosításai a stílushoz kapcsolódó tulajdonságok, mint a DataListItem, Font, ForeColor, BackColor, CssClass stb., használatával implementálhatók. Ahhoz, hogy befolyásolhassuk a DataList-sablon egyes webes vezérlőinek formázását, programozott módon kell elérnünk és módosítani a webvezérlők stílusát. Láthattuk, hogyan érhetjük el ezt az Egyéni formázás adatok alapján oktatóanyagban. Az Repeater vezérlőhöz hasonlóan az RepeaterItem osztálynak sincsenek stílushoz kapcsolódó tulajdonságai; ezért az RepeaterItem eseménykezelőben végrehajtott összes stílusmódosítást programozott módon, a sablonon belüli webes vezérlők elérésével és frissítésével kell végezni ItemDataBound segítségével.

Mivel a ItemDataBound DataList és az Repeater formázási technikája gyakorlatilag azonos, a példánk a DataList használatára összpontosít.

1. lépés: Termékadatok megjelenítése a DataListben

Mielőtt aggódnánk a formázás miatt, először hozzunk létre egy oldalt, amely egy DataList használatával jeleníti meg a termékinformációkat. Az előző oktatóanyagban létrehoztunk egy DataListet, amely ItemTemplate megjeleníti az egyes termékek nevét, kategóriáját, szállítóját, egységenkénti mennyiségét és árát. Ismételje meg ezt a funkciót ebben az oktatóanyagban. Ehhez létrehozhatja újra a DataListet és annak ObjectDataSource-t az alapoktól kezdve, vagy átmásolhatja ezeket a vezérlőket az előző oktatóanyagban () létrehozott lapról,Basics.aspx és beillesztheti őket az oktatóanyag (Formatting.aspx) lapjára.

Miután replikálta a DataList és az ObjectDataSource funkciót a Basics.aspx-ből a Formatting.aspx-be, szánjon egy kis időt, hogy a DataList tulajdonságát IDDataList1-ról egy leíróbb ItemDataBoundFormattingExample-re módosítsa. Ezután tekintse meg a DataListet egy böngészőben. Ahogy az 1. ábrán látható, az egyetlen formázási különbség az egyes termékek között az, hogy a háttérszín váltakozik.

A termékek az Adatlista vezérlőelemben vannak felsorolva

1. ábra: A termékek az Adatlista vezérlőelemben vannak felsorolva (kattintson ide a teljes méretű kép megtekintéséhez)

Ebben az oktatóanyagban formázzuk a DataList-et úgy, hogy a 20,00 usd-nél kisebb árú termékek neve és egységára is sárga színű legyen.

2. lépés: Az Adatok értékének programozott meghatározása az ItemDataBound eseménykezelőben

Mivel csak a 20,00 USD alatti árú termékekre vonatkozik az egyéni formázás, minden egyes termék árát meg kell határoznunk. Amikor adatokat köt egy DataListhez, a DataList felsorolja az adatforrás rekordjait, és minden rekordhoz létrehoz egy DataListItem példányt, amelyre az adatforrásrekordot köti a DataListItem. Miután az adott rekord adatai az aktuális DataListItem objektumhoz lettek kötve, a DataList-esemény ItemDataBound aktiválódik. Létrehozhatunk egy eseménykezelőt az eseményhez az aktuális DataListItem adatértékek vizsgálatához, és ezen értékek alapján elvégezhetjük a szükséges formázási módosításokat.

Hozzon létre egy eseményt ItemDataBound a DataListhez, és adja hozzá a következő kódot:

Protected Sub ItemDataBoundFormattingExample_ItemDataBound _
    (sender As Object, e As DataListItemEventArgs) _
    Handles ItemDataBoundFormattingExample.ItemDataBound
    If e.Item.ItemType = ListItemType.Item OrElse _
       e.Item.ItemType = ListItemType.AlternatingItem Then
        ' Programmatically reference the ProductsRow instance
        ' bound to this DataListItem
        Dim product As Northwind.ProductsRow = _
            CType(CType(e.Item.DataItem, System.Data.DataRowView).Row, _
                Northwind.ProductsRow)
        ' See if the UnitPrice is not NULL and less than $20.00
        If Not product.IsUnitPriceNull() AndAlso product.UnitPrice < 20 Then
            ' TODO: Highlight the product's name and price
        End If
    End If
End Sub

Bár a DataList eseménykezelőjének koncepciója ItemDataBoundRowDataBound és szemantikája megegyezik a GridView-eseménykezelő által az Egyéni formázás adatok alapján oktatóanyagban használtakkal, a szintaxis kissé eltér. Amikor az ItemDataBound esemény bekövetkezik, az adatokhoz frissen kapcsolt DataListItem a megfelelő eseménykezelőbe kerül továbbításra e.Item útján (nem pedig e.Row-val/vel, ahogy a GridView RowDataBound eseménykezelője esetén). A DataList eseménykezelője ItemDataBoundminden, a DataListhez hozzáadott sorhoz aktiválódik, beleértve az élőfejsorokat, az élőlábsorokat és az elválasztó sorokat. A termékinformációk azonban csak az adatsorhoz kötöttek. Ezért amikor az eseményt a ItemDataBound DataListhez kötött adatok vizsgálatára használja, először meg kell győződnünk arról, hogy egy adatelemen dolgozunk. Ez az DataListItem s ItemType tulajdonság ellenőrzésével érhető el, amely a következő nyolc érték egyikével rendelkezhet:

  • AlternatingItem
  • EditItem
  • Footer
  • Header
  • Item
  • Pager
  • SelectedItem
  • Separator

A DataList adat elemeit mindkettő, Item és AlternatingItem``DataListItem, alkotja. Feltéve, hogy egy Item-val vagy AlternatingItem-val dolgozunk, hozzáférünk az aktuális ProductsRow-hoz kötött tényleges DataListItem példányhoz. Az DataListItem s DataItem tulajdonság az objektumra DataRowView mutató hivatkozást tartalmaz, amelynek Row tulajdonsága a tényleges ProductsRow objektumra mutató hivatkozást tartalmaz.

Ezután ellenőrizzük a példány ProductsRowUnitPrice tulajdonságát. Mivel a Termékek tábla s mezője UnitPrice lehetővé teszi NULL az értékeket, mielőtt megpróbálnánk elérni a UnitPrice tulajdonságot, először ellenőriznünk kell, hogy van-e NULL értéke a IsUnitPriceNull() metódussal. Ha az UnitPrice érték nem NULL, akkor ellenőrizzük, hogy 20,00 dollárnál kisebb-e. Ha valóban 20,00 usd alatt van, akkor az egyéni formázást kell alkalmaznunk.

3. lépés: A termék nevének és árának kiemelése

Ha már tudjuk, hogy egy termék ára kevesebb, mint 20,00 usd, csak az marad, hogy kiemeljük a nevét és árát. Ehhez először programozott módon kell hivatkoznunk a címkevezérlőkre, ItemTemplate amelyek a termék nevét és árát jelenítik meg. Következő lépésként sárga hátteret kell megjeleníteniük. Ez a formázási információ a Címkék BackColor tulajdonságok (LabelID.BackColor = Color.Yellow) közvetlen módosításával alkalmazható; ideális esetben azonban minden megjelenítéssel kapcsolatos dolgot kaszkádolt stíluslapokkal kell kifejezni. Valójában már rendelkezünk egy stíluslaplal, amely megadja a kívánt formázást Styles.css - AffordablePriceEmphasis, amelyet az Egyéni formázás az adatok alapján oktatóanyagban hozott létre és tárgyalt.

A formázás alkalmazásához egyszerűen állítsa be a két címke webvezérlő CssClass tulajdonságát AffordablePriceEmphasis a következő kódban látható módon.

' Highlight the product name and unit price Labels
' First, get a reference to the two Label Web controls
Dim ProductNameLabel As Label = CType(e.Item.FindControl("ProductNameLabel"), Label)
Dim UnitPriceLabel As Label = CType(e.Item.FindControl("UnitPriceLabel"), Label)
' Next, set their CssClass properties
If ProductNameLabel IsNot Nothing Then
    ProductNameLabel.CssClass = "AffordablePriceEmphasis"
End If
If UnitPriceLabel IsNot Nothing Then
    UnitPriceLabel.CssClass = "AffordablePriceEmphasis"
End If

Ha az ItemDataBound eseménykezelő befejeződött, nyissa meg újra a Formatting.aspx lapot egy böngészőben. A 2. ábrán látható, hogy azok a termékek, amelyek ára 20,00 USD alatt van, mind a nevük, mind az áruk kiemelve van.

A 20,00 USD-nél kisebb termékek kiemeltek

2. ábra: A 20,00 usd-nél kisebb termékek kiemeltek (ide kattintva megtekintheti a teljes méretű képet)

Megjegyzés:

Mivel a DataList HTML-ként <table>jelenik meg, a DataListItem példányai stílushoz kapcsolódó tulajdonságokkal rendelkeznek, amelyek beállíthatók, hogy egy adott stílust alkalmazzanak a teljes elemre. Ha például a teljes tételt sárga színnel szeretnénk kiemelni, ha az ára 20,00 USD-nél kisebb volt, lecserélhettük volna a címkékre hivatkozó kódot, és a tulajdonságokat a következő kódsorra állíthattuk CssClass volna be: e.Item.CssClass = "AffordablePriceEmphasis" (lásd a 3. ábrát).

Az RepeaterItem elemek, amelyek az Ismétlés vezérlőt alkotják, azonban nem rendelkeznek ilyen stílusszintű tulajdonságokkal. Ezért az egyéni formázás alkalmazása az Ismétlő esetén megköveteli, hogy a stílustulajdonságokat az Ismétlő sablonjaiban található webes vezérlőkre is alkalmazzuk, ahogyan azt a 2. ábrán tettük.

A teljes termékelem ki van emelve a 20,00 USD alatti termékeknél

3. ábra: A teljes termékelem ki van emelve a 20,00 usd alatti termékekhez (ide kattintva megtekintheti a teljes méretű képet)

Formázási függvények használata a sablonból

A GridView Control oktatóanyag Sablonmezők használata című oktatóanyagában láthattuk, hogyan alkalmazhat egyéni formázást a GridView-sorokhoz kötött adatok alapján a GridView TemplateFielden belüli formázási függvényekkel. A formázási függvény olyan metódus, amely egy sablonból hívható meg, és a helyén kibocsátandó HTML-t adja vissza. A formázási függvények a ASP.NET lap kód mögötti osztályában találhatók, vagy a mappában App_Code vagy egy külön Osztálytár projektben lévő osztályfájlokba központosíthatók. A formázási függvény áthelyezése az ASP.NET oldal kód mögötti osztályából ideális, ha ugyanazt a formázási függvényt több ASP.NET oldalon vagy más ASP.NET webalkalmazásban szeretné használni.

A formázási függvények bemutatásához adja meg, hogy a termékinformációk tartalmazzák-e a termék neve melletti [MEGSZŰNT] szöveget, ha az már megszűnt. Azt is tegyük fel, hogy az ár sárga színnel van kiemelve, ha kisebb, mint 20,00 USD (ahogy az eseménykezelő példájában ItemDataBound is). Ha az ár 20,00 USD vagy magasabb, akkor ne a tényleges árat jelenítsük meg, hanem a szöveget, Kérjük, kérjen árajánlatot. A 4. ábrán az alábbi formázási szabályokkal rendelkező termékek listáját ábrázoló képernyőkép látható.

A DataList vezérlőelemben felsorolt termékeket ábrázoló képernyőkép, amelyen a 20,00 usd-nél nagyobb költségű termékek ára a következő szöveggel váltható fel:

4. ábra: Drága termékek esetén az ár a szövegre cserélődik. Kérjen árajánlatot (Kattintson ide a teljes méretű kép megtekintéséhez)

1. lépés: A formázási függvények létrehozása

Ebben a példában két formázási függvényre van szükség, az egyikben a termék neve és a [MEGSZŰNT] szöveg szerepel, ha szükséges, a másik pedig a kiemelt árat jeleníti meg, ha az 20,00 usd-nél kisebb, vagy a szöveget, kérjük, kérjen másként árajánlatot. Hozzuk létre ezeket a függvényeket a ASP.NET lap kód mögötti osztályában, és nevezzük el őket DisplayProductNameAndDiscontinuedStatus és DisplayPrice. Mindkét metódusnak sztringként való megjelenítéshez vissza kell adnia a HTML-t, és mindkettőt meg kell jelölni Protected (vagy Public) a ASP.NET lap deklaratív szintaxisrészéből való meghíváshoz. A két módszer kódja a következő:

Protected Function DisplayProductNameAndDiscontinuedStatus _
    (productName As String, discontinued As Boolean) As String
    ' Return just the productName if discontinued is false
    If Not discontinued Then
        Return productName
    Else
        ' otherwise, return the productName appended with the text "[DISCONTINUED]"
        Return String.Concat(productName, " [DISCONTINUED]")
    End If
End Function
Protected Function DisplayPrice(product As Northwind.ProductsRow) As String
    ' If price is less than $20.00, return the price, highlighted
    If Not product.IsUnitPriceNull() AndAlso product.UnitPrice < 20 Then
        Return String.Concat("<span class="AffordablePriceEmphasis">", _
                             product.UnitPrice.ToString("C"), "</span>")
    Else
        ' Otherwise return the text, "Please call for a price quote"
        Return "<span>Please call for a price quote</span>"
    End If
End Function

Vegye figyelembe, hogy a DisplayProductNameAndDiscontinuedStatus metódus skaláris értékként fogadja el a productName és discontinued adatmezők értékeit, míg a DisplayPrice metódus egy ProductsRow példányt fogad el (nem egy unitPrice skaláris értéket). Bármelyik megközelítés működni fog; ha azonban a formázási függvény olyan skaláris értékekkel dolgozik, amelyek tartalmazhatnak adatbázis-értékeket (mint például NULL; sem UnitPrice sem ProductName nem engedélyezik a Discontinued értékeket), különös figyelmet kell fordítani ezekre a skaláris bemenetekre.

A bemeneti paraméternek különösen típusnak Object kell lennie, mivel a bejövő érték lehet egy DBNull példány a várt adattípus helyett. Emellett ellenőrizni kell, hogy a bejövő érték adatbázis-érték-e NULL . Vagyis ha azt szeretnénk, hogy a DisplayPrice metódus skaláris értékként fogadja el az árat, akkor a következő kódot kell használnunk:

Protected Function DisplayPrice(ByVal unitPrice As Object) As String
    ' If price is less than $20.00, return the price, highlighted
    If Not Convert.IsDBNull(unitPrice) AndAlso CType(unitPrice, Decimal) < 20 Then
        Return String.Concat("<span class="AffordablePriceEmphasis">", _
            CType(unitPrice, Decimal).ToString("C"), "</span>")
    Else
        ' Otherwise return the text, "Please call for a price quote"
        Return "<span>Please call for a price quote</span>"
    End If
End Function

Vegye figyelembe, hogy a unitPrice bemeneti paraméter típusa Object, és hogy a feltételes utasítás módosítva lett azért, hogy megállapítsa, unitPriceDBNull-e vagy sem. Továbbá, mivel a unitPrice bemeneti paramétert a rendszer decimális értékként Objectadja át, a paramétert decimális értékre kell leadni.

2. lépés: A Formázás függvény meghívása a DataList s ItemTemplate-ból

A ASP.NET lap kód mögötti osztályához hozzáadott formázási függvényekkel csak a DataList s ItemTemplatefájlból hívhatja meg ezeket a formázási függvényeket. Ha formázási függvényt szeretne meghívni egy sablonból, helyezze a függvényhívást a databinding szintaxisba:

<%# MethodName(inputParameter1, inputParameter2, ...) %>

A DataList ItemTemplate vezérlőelemben a ProductNameLabel Címke webvezérlő jelenleg a termék nevét jeleníti meg, a Text tulajdonságának <%# Eval("ProductName") %> eredménye hozzárendelésével. Annak érdekében, hogy megjelenítse a nevet plusz a [MEGSZÜNTETVE] szöveget, ha szükséges, frissítse a deklaratív szintaxist úgy, hogy a Text tulajdonságnak a DisplayProductNameAndDiscontinuedStatus metódus értékét adja. Ennek során a szintaxis használatával Eval("columnName") meg kell adnunk a termék nevét és a megszüntetett értékeket. Eval típusértéket Objectad vissza, de a metódus típus DisplayProductNameAndDiscontinuedStatus típusú bemeneti paramétereket StringBooleanvár, ezért a Eval metódus által visszaadott értékeket a várt bemeneti paramétertípusokra kell vetnünk, például:

<h4>
    <asp:Label ID="ProductNameLabel" runat="server"
        Text='<%# DisplayProductNameAndDiscontinuedStatus((string) Eval("ProductName"),
              (bool) Eval("Discontinued")) %>'>
    </asp:Label>
</h4>

Az ár megjelenítéséhez egyszerűen beállíthatjuk a UnitPriceLabel Címke tulajdonságot Text a metódus által DisplayPrice visszaadott értékre, ugyanúgy, mint a termék nevének és a [MEGSZŰNT] szövegnek a megjelenítéséhez. Ahelyett azonban, hogy skaláris UnitPrice bemeneti paraméterként adnánk át, inkább a teljes ProductsRow példányt adjuk át:

<asp:Label ID="UnitPriceLabel" runat="server"
    Text='<%# DisplayPrice((Northwind.ProductsRow)
          ((System.Data.DataRowView) Container.DataItem).Row) %>'>
</asp:Label>

A formázási függvények hívásainak elhelyezése után szánjon egy kis időt arra, hogy előrehaladásunkat megtekintse egy böngészőben. A képernyőnek az 5. ábrához hasonlóan kell kinéznie. A megszűnt termékek mellett szerepel a [MEGSZŰNT] szöveg, és azoknál a termékeknél, amelyek több mint 20,00 dollárba kerülnek, az ár helyett a következő szöveg jelenik meg: Kérjük, kérjen árajánlatot.

Képernyőkép a DataList vezérlőben felsorolt termékekről; a 20,00 dollárnál drágább termékek ára helyett a

5. ábra: Drága termékek esetén az ár a szövegre cserélődik. Kérjen árajánlatot (Kattintson ide a teljes méretű kép megtekintéséhez)

Összefoglalás

A DataList vagy az Repeater vezérlő tartalmának az adatok alapján történő formázása két módszerrel végezhető el. Az első módszer az, hogy létrehozunk egy eseménykezelőt az ItemDataBound eseményhez, amely akkor aktiválódik, amikor az adatforrás minden rekordja egy új DataListItem vagy RepeaterItem elemhez kötődik. Az eseménykezelőben ItemDataBound az aktuális elem adatai megvizsgálhatók, majd a formázás alkalmazható a sablon tartalmára vagy s esetén DataListItem a teljes elemre.

Másik lehetőségként az egyéni formázás formázási függvényekkel is megvalósítható. A formázási függvények olyan metódusok, amelyek a DataList vagy Repeater sablonjaiból hívhatók meg, és visszaadják a HTML-t, amit a helyükön kibocsátanak. A formázási függvény által visszaadott HTML-t gyakran az aktuális elemhez kötött értékek határozzák meg. Ezek az értékek átadhatók a formázási függvénynek akár skaláris értékként, akár úgy, hogy a teljes objektumot, amely az elemhez van kötve (mint például a ProductsRow példány esetében), átadjuk.

Boldog programozást!

Tudnivalók a szerzőről

Scott Mitchell, hét ASP/ASP.NET-könyv szerzője és a 4GuysFromRolla.com alapítója, 1998 óta dolgozik a Microsoft webtechnológiáival. Scott független tanácsadóként, edzőként és íróként dolgozik. Legújabb könyve Sams Teach Yourself ASP.NET 2.0 24 Óra Alatt című. Ő itt elérhető mitchell@4GuysFromRolla.com.

Külön köszönet

Ezt az oktatóanyag-sorozatot sok hasznos véleményező áttekintette. Az oktatóanyag vezető véleményezői Yaakov Ellis, Randy Schmidt és Liz Shulok voltak. Szeretné áttekinteni a közelgő MSDN-cikkeimet? Ha igen, írj egy sort a mitchell@4GuysFromRolla.com-ra.