Ukládání dalších informací o uživatelích (C#)
Poznámka
Od napsání tohoto článku se zprostředkovatelé členství ASP.NET nahradili službou ASP.NET Identity. Důrazně doporučujeme aktualizovat aplikace tak, aby používaly platformu ASP.NET Identity Platform místo zprostředkovatelů členství, které se objevovalo v době psaní tohoto článku. ASP.NET Identity má oproti systému členství ASP.NET řadu výhod, mezi které patří:
- Lepší výkon
- Vylepšená rozšiřitelnost a testovatelnost
- Podpora OAuth, OpenID Connect a dvojúrovňového ověřování
- Podpora identit založených na deklarací identity
- Lepší interoperabilita s ASP.Net Core
Stažení kódu nebo stažení souboru PDF
V tomto kurzu odpovíme na tuto otázku vytvořením velmi základní aplikace guestbook. Podíváme se přitom na různé možnosti modelování informací o uživatelích v databázi a pak zjistíme, jak tato data přidružit k uživatelským účtům vytvořeným architekturou membership.
Úvod
ASP. Rozhraní Membership na platformě NET nabízí flexibilní rozhraní pro správu uživatelů. Rozhraní API členství zahrnuje mimo jiné metody ověřování přihlašovacích údajů, načítání informací o aktuálně přihlášených uživatelích, vytvoření nového uživatelského účtu a odstranění uživatelského účtu. Každý uživatelský účet v rámci členství obsahuje pouze vlastnosti potřebné k ověřování přihlašovacích údajů a provádění základních úloh souvisejících s uživatelskými účty. To je důkazem metod a vlastností MembershipUser
třídy, která modeluje uživatelský účet v rámci členství. Tato třída má vlastnosti, jako jsou UserName
, Email
a IsLockedOut
, a metody, jako jsou GetPassword
a UnlockUser
.
Aplikace často potřebují ukládat další informace o uživatelích, které nejsou součástí architektury členství. Online prodejce může například potřebovat, aby si každý uživatel uložil dodací a fakturační adresu, platební údaje, předvolby doručení a kontaktní telefonní číslo. Každá objednávka v systému je navíc přidružená ke konkrétnímu uživatelskému účtu.
Třída MembershipUser
neobsahuje vlastnosti jako PhoneNumber
nebo DeliveryPreferences
nebo PastOrders
. Jak tedy můžeme sledovat informace o uživateli, které aplikace potřebuje, a integrovat je s architekturou členství? V tomto kurzu odpovíme na tuto otázku vytvořením velmi základní aplikace guestbook. Podíváme se přitom na různé možnosti modelování informací o uživatelích v databázi a pak zjistíme, jak tato data přidružit k uživatelským účtům vytvořeným architekturou membership. Pusťme se do toho.
Krok 1: Vytvoření datového modelu aplikace knihy hostů
K zachycení informací o uživateli v databázi a jejich přidružení k uživatelským účtům vytvořeným v rámci členství je možné použít celou řadu technik. Abychom mohli tyto techniky ilustrovat, budeme muset rozšířit výukovou webovou aplikaci tak, aby zachytila nějaký druh dat souvisejících s uživatelem. (V současné době datový model aplikace obsahuje pouze tabulky aplikačních služeb, které SqlMembershipProvider
potřebuje .)
Pojďme vytvořit velmi jednoduchou aplikaci knihy hostů, kde ověřený uživatel může zanechat komentář. Kromě ukládání komentářů k knize hostů, umožníme každému uživateli uložit své domovské město, domovskou stránku a podpis. Pokud ho zadáte, zobrazí se na každé zprávě, kterou uživatel v knize hostů opustil, domovská stránka a podpis.
GuestbookComments
Přidání tabulky
Aby bylo možné zachytit komentáře k knize hostů, musíme vytvořit tabulku databáze s názvem GuestbookComments
, která obsahuje sloupce jako CommentId
, Subject
Body
, a CommentDate
. Také musíme, aby každý záznam v GuestbookComments
tabulce odkazoval na uživatele, který komentář opustil.
Pokud chcete přidat tuto tabulku do databáze, přejděte v sadě Visual Studio do Průzkumníka databáze a přejděte k podrobnostem databáze SecurityTutorials
. Klikněte pravým tlačítkem na složku Tabulky a zvolte Přidat novou tabulku. Tím se vytvoří rozhraní, které nám umožňuje definovat sloupce pro novou tabulku.
Obrázek 1: Přidání nové tabulky do SecurityTutorials
databáze (kliknutím zobrazíte obrázek v plné velikosti)
Dále definujte GuestbookComments
sloupce . Začněte přidáním sloupce s názvem CommentId
typu uniqueidentifier
. Tento sloupec bude jednoznačně identifikovat jednotlivé komentáře v knize hostů, takže je zakažte NULL
a označte ho jako primární klíč tabulky. Místo zadání hodnoty pro CommentId
pole u každého INSERT
pole můžeme označit, že by se pro toto pole měla automaticky vygenerovat nová uniqueidentifier
hodnota, a to nastavením výchozí hodnoty sloupce na INSERT
NEWID()
. Po přidání tohoto prvního pole, jeho označení jako primárního klíče a nastavení výchozí hodnoty by obrazovka měla vypadat podobně jako na obrázku 2.
Obrázek 2: Přidání primárního sloupce s názvem CommentId
(kliknutím zobrazíte obrázek v plné velikosti)
Dále přidejte sloupec s názvem Subject
type nvarchar(50)
a sloupec s názvem Body
typu nvarchar(MAX)
, který v obou sloupcích zakáže NULL
s. Potom přidejte sloupec s názvem CommentDate
typu datetime
. NULL
Zakázat a nastavit CommentDate
výchozí hodnotu sloupce na getdate()
.
Zbývá jen přidat sloupec, který ke každému komentáři k knize hostů přidruží uživatelský účet. Jednou z možností je přidat sloupec s názvem UserName
typu nvarchar(256)
. Jedná se o vhodnou volbu SqlMembershipProvider
při použití jiného poskytovatele členství než . Ale při použití SqlMembershipProvider
, jak jsme v této sérii kurzů, není zaručeno, UserName
že sloupec v aspnet_Users
tabulce bude jedinečný. aspnet_Users
Primární klíč tabulky je UserId
a je typu uniqueidentifier
. GuestbookComments
Proto tabulka potřebuje sloupec s názvem UserId
typu uniqueidentifier
(nepovolující NULL
hodnoty). Pokračujte a přidejte tento sloupec.
Poznámka
Jak jsme probrali v kurzu Vytvoření schématu členství v SQL Server, architektura Membership je navržená tak, aby umožňovala více webovým aplikacím s různými uživatelskými účty sdílet stejné uživatelské úložiště. Dělá to rozdělením uživatelských účtů do různých aplikací. A i když je zaručeno, že každé uživatelské jméno bude v rámci aplikace jedinečné, stejné uživatelské jméno může být použito v různých aplikacích, které používají stejné úložiště uživatelů. V tabulce je složené UNIQUE
omezení aspnet_Users
pro UserName
pole a ApplicationId
, ale ne jedno omezení pouze pro UserName
pole. V důsledku toho může mít tabulka aspnet_Users dva (nebo více) záznamů se stejnou UserName
hodnotou. Existuje však UNIQUE
omezení aspnet_Users
pro pole tabulky UserId
(protože se jedná o primární klíč). Omezení UNIQUE
je důležité, protože bez něj nemůžeme vytvořit omezení cizího klíče mezi tabulkami GuestbookComments
a aspnet_Users
.
Po přidání UserId
sloupce uložte tabulku kliknutím na ikonu Uložit na panelu nástrojů. Pojmenujte novou tabulku GuestbookComments
.
V tabulce musíme řešit GuestbookComments
poslední problém: mezi sloupcem a sloupcem musíme vytvořit omezeníGuestbookComments.UserId
cizího aspnet_Users.UserId
klíče. Chcete-li toho dosáhnout, klikněte na ikonu Relace na panelu nástrojů a spusťte dialogové okno Vztahy cizích klíčů. (Případně můžete toto dialogové okno otevřít tak, že přejdete do nabídky Designer tabulky a zvolíte Relace.)
Klikněte na tlačítko Přidat v levém dolním rohu dialogového okna Vztahy cizích klíčů. Tím se přidá nové omezení cizího klíče, i když stále potřebujeme definovat tabulky, které se účastní relace.
Obrázek 3: Použití dialogového okna Vztahy cizích klíčů ke správě omezení cizího klíče tabulky (kliknutím zobrazíte obrázek v plné velikosti)
Potom klikněte na ikonu se třemi tečkami v řádku "Specifikace tabulky a sloupců" na pravé straně. Tím se otevře dialogové okno Tabulky a sloupce, ve kterém můžeme zadat tabulku a sloupec primárního klíče a sloupec cizího GuestbookComments
klíče z tabulky. Konkrétně vyberte aspnet_Users
a UserId
jako tabulku a sloupec primárního klíče a UserId
z GuestbookComments
tabulky jako sloupec cizího klíče (viz Obrázek 4). Po definování tabulek a sloupců primárního a cizího klíče se kliknutím na OK vraťte do dialogového okna Relace cizího klíče.
Obrázek 4: Vytvoření omezení cizího klíče mezi aspnet_Users
tabulkami a GuesbookComments
(kliknutím zobrazíte obrázek v plné velikosti)
V tomto okamžiku bylo stanoveno omezení cizího klíče. Přítomnost tohoto omezení zajišťuje relační integritu mezi oběma tabulkami tím, že zaručuje, že nikdy nebude existovat položka knihy hostů odkazující na neexistující uživatelský účet. Omezení cizího klíče ve výchozím nastavení zakáže odstranění nadřazeného záznamu, pokud existují odpovídající podřízené záznamy. To znamená, že pokud uživatel vytvoří jeden nebo více komentářů k knize hostů a pak se pokusíme tento uživatelský účet odstranit, odstranění se nezdaří, pokud jeho komentáře k knize hostů nejsou nejprve odstraněny.
Omezení cizího klíče lze nakonfigurovat tak, aby při odstranění nadřazeného záznamu automaticky odstranila přidružené podřízené záznamy. Jinými slovy, toto omezení cizího klíče můžeme nastavit tak, aby se při odstranění uživatelského účtu automaticky odstranily položky knihy hostů uživatele. Chcete-li to provést, rozbalte část "INSERT and UPDATE Specification" a nastavte vlastnost "Odstranit pravidlo" na Cascade.
Obrázek 5: Konfigurace omezení cizího klíče na kaskádová odstranění (kliknutím zobrazíte obrázek v plné velikosti)
Chcete-li uložit omezení cizího klíče, kliknutím na tlačítko Zavřít ukončete relace cizího klíče. Potom kliknutím na ikonu Uložit na panelu nástrojů tabulku a tuto relaci uložte.
Uložení domovského města uživatele, domovské stránky a podpisu
Tabulka GuestbookComments
ukazuje, jak ukládat informace, které sdílejí relaci 1:N s uživatelskými účty. Vzhledem k tomu, že každý uživatelský účet může mít libovolný počet přidružených komentářů, je tato relace modelována vytvořením tabulky, ve které se bude uchovávat sada komentářů, která obsahuje sloupec, který odkazuje jednotlivé komentáře na konkrétního uživatele. Při použití SqlMembershipProvider
příkazu se toto propojení nejlépe vytvoří vytvořením sloupce s názvem UserId
typu uniqueidentifier
a omezením cizího klíče mezi tímto sloupcem a aspnet_Users.UserId
.
K jednotlivým uživatelským účtům teď potřebujeme přidružit tři sloupce, abychom uložili domovské město, domovskou stránku a podpis uživatele, které se zobrazí v komentářích k jeho knize hostů. Existuje několik různých způsobů, jak toho dosáhnout:
Přidání nových sloupců do
aspnet_Users
Neboaspnet_Membership
Tabulky. Tento přístup nedoporučuji, protože upravuje schéma používanéSqlMembershipProvider
nástrojem . Toto rozhodnutí se může vrátit, aby vás pronásledovat na cestě. Co když například budoucí verze ASP.NET používá jinéSqlMembershipProvider
schéma. Microsoft může zahrnout nástroj pro migraci dat ASP.NET 2.0SqlMembershipProvider
do nového schématu, ale pokud jste upravili schéma ASP.NET 2.0SqlMembershipProvider
, nemusí být takový převod možný.Použijte ASP. NET definuje vlastnost profilu pro domovské město, domovskou stránku a podpis. ASP.NET zahrnuje architekturu profilu, která je navržená tak, aby ukládala další data specifická pro uživatele. Stejně jako architektura členství je architektura profilů sestavena na základě modelu zprostředkovatele. Rozhraní .NET Framework se dodává se sthat ukládáním
SqlProfileProvider
dat profilu do databáze SQL Server. Ve skutečnosti už naše databáze obsahuje tabulku používanou objektemSqlProfileProvider
(aspnet_Profile
), protože byla přidána při přidání aplikačních služeb zpět v kurzu Vytvoření schématu členství v SQL Server.
Hlavní výhodou architektury profilů je to, že umožňuje vývojářům definovat vlastnosti profilu vWeb.config
– není nutné zapsat žádný kód pro serializaci dat profilu do a z podkladového úložiště dat. Stručně řečeno, definovat sadu vlastností profilu a pracovat s nimi v kódu je neuvěřitelně snadné. Pokud jde o správu verzí, systém profilů ale nechává mnoho požadavků, takže pokud máte aplikaci, ve které očekáváte, že se později přidají nové vlastnosti specifické pro uživatele, nebo existující vlastnosti, které se mají odebrat nebo upravit, nemusí být architektura profilů nejlepší volbou. Kromě tohoSqlProfileProvider
ukládá vlastnosti profilu vysoce denormalizovaným způsobem, takže je téměř nemožné spouštět dotazy přímo na data profilu (například kolik uživatelů má domovské město New York).
Další informace o architektuře profilů najdete v části Další informace na konci tohoto kurzu.Přidejte tyto tři sloupce do nové tabulky v databázi a vytvořte relaci 1:1 mezi touto tabulkou a
aspnet_Users
. Tento přístup zahrnuje o něco více práce než s architekturou profilů, ale nabízí maximální flexibilitu při modelování dalších vlastností uživatele v databázi. Tuto možnost použijeme v tomto kurzu.
Vytvoříme novou tabulku s názvem pro UserProfiles
uložení domovského města, domovské stránky a podpisu pro každého uživatele. V okně Průzkumníka databází klikněte pravým tlačítkem na složku Tabulky a zvolte vytvořit novou tabulku. Pojmenujte první sloupec UserId
a nastavte jeho typ na uniqueidentifier
. NULL
Zakázat hodnoty a označit sloupec jako primární klíč. Dále přidejte sloupce s názvy: HomeTown
typu nvarchar(50)
; HomepageUrl
typu nvarchar(100)
; a Podpis typu nvarchar(500)
. Každý z těchto tří sloupců může přijmout NULL
hodnotu.
Obrázek 6: Vytvoření UserProfiles
tabulky (kliknutím zobrazíte obrázek v plné velikosti)
Uložte tabulku a pojmenujte ji UserProfiles
. Nakonec vytvořte omezení cizího klíče mezi polem UserProfiles
tabulky UserId
a polem aspnet_Users.UserId
. Stejně jako u omezení cizího klíče mezi GuestbookComments
tabulkami a aspnet_Users
nechte toto omezení kaskádovitě odstranit. Vzhledem k tomu, UserId
že pole v UserProfiles
souboru je primárním klíčem, zajistí se, že pro každý uživatelský účet nebude v UserProfiles
tabulce více než jeden záznam. Tento typ relace se označuje jako 1:1.
Teď, když máme vytvořený datový model, jsme připraveni ho použít. V krocích 2 a 3 se podíváme na to, jak může aktuálně přihlášený uživatel zobrazit a upravit své domovské město, domovskou stránku a informace o podpisu. V kroku 4 vytvoříme rozhraní pro ověřené uživatele, kteří budou do knihy hostů odesílat nové komentáře a prohlížet si ty stávající.
Krok 2: Zobrazení domovské stránky, domovské stránky a podpisu uživatele
Aktuálně přihlášený uživatel může zobrazit a upravit informace o svém domovském městě, domovské stránce a podpisech různými způsoby. Uživatelské rozhraní bychom mohli vytvořit ručně pomocí ovládacích prvků TextBox a Label nebo bychom mohli použít některý z datových webových ovládacích prvků, jako je například ovládací prvek DetailsView. K provedení databáze SELECT
a UPDATE
příkazů bychom mohli napsat ADO.NET kód do třídy kódu na pozadí naší stránky nebo případně použít deklarativní přístup s SqlDataSource. V ideálním případě by naše aplikace obsahovala vrstvenou architekturu, kterou bychom mohli buď programově vyvolat z třídy kódu na pozadí stránky, nebo deklarativně prostřednictvím ovládacího prvku ObjectDataSource.
Vzhledem k tomu, že se tato série kurzů zaměřuje na ověřování formulářů, autorizaci, uživatelské účty a role, nebudeme podrobně diskutovat o těchto různých možnostech přístupu k datům ani o tom, proč je upřednostňována vrstvené architektury před spouštěním příkazů SQL přímo ze stránky ASP.NET. Chystám se projít pomocí DetailsView a SqlDataSource – nejrychlejší a nejjednodušší možnost – ale probírané koncepty se určitě dají použít na alternativní webové ovládací prvky a logiku přístupu k datům. Další informace o práci s daty v ASP.NET najdete v sérii kurzů Práce s daty v ASP.NET 2.0 .
AdditionalUserInfo.aspx
Otevřete stránku ve Membership
složce a přidejte na stránku ovládací prvek DetailsView, nastavte jeho ID
vlastnost na UserProfile
a vymažte jeho Width
vlastnosti a Height
vlastnosti. Rozbalte inteligentní značku DetailsView a zvolte její vazbu na nový ovládací prvek zdroje dat. Tím se spustí Průvodce konfigurací zdroje dat (viz obrázek 7). První krok vás vyzve k zadání typu zdroje dat. Vzhledem k tomu, že se připojíme přímo k SecurityTutorials
databázi, zvolte ikonu Databáze a zadejte ID
jako UserProfileDataSource
.
Obrázek 7: Přidání nového ovládacího prvku SqlDataSource s názvem UserProfileDataSource
(kliknutím zobrazíte obrázek v plné velikosti)
Na další obrazovce se zobrazí výzva k použití databáze. Už jsme pro databázi definovali SecurityTutorials
připojovací řetězecWeb.config
. Tento název připojovacího řetězce – SecurityTutorialsConnectionString
by měl být v rozevíracím seznamu. Vyberte tuto možnost a klikněte na Další.
Obrázek 8: Výběr SecurityTutorialsConnectionString
ze seznamu Drop-Down (kliknutím zobrazíte obrázek v plné velikosti)
Následující obrazovka nás vyzve k zadání tabulky a sloupců, které se mají dotazovat. V rozevíracím UserProfiles
seznamu vyberte tabulku a zkontrolujte všechny sloupce.
Obrázek 9: Vrácení všech sloupců z UserProfiles
tabulky (kliknutím zobrazíte obrázek v plné velikosti)
Aktuální dotaz na obrázku 9 vrátí všechny záznamy v UserProfiles
nástroji , ale zajímá nás pouze aktuálně přihlášený záznam uživatele. Pokud chcete přidat WHERE
klauzuli, kliknutím na WHERE
tlačítko zobrazte dialogové okno Přidat WHERE
klauzuli (viz obrázek 10). Tady můžete vybrat sloupec, podle který chcete filtrovat, operátor a zdroj parametru filtru. Jako sloupec vyberte UserId
"=" jako Operátor.
Bohužel neexistuje žádný předdefinovaný zdroj parametrů, který by vrátil aktuálně přihlášenou hodnotu uživatele UserId
. Tuto hodnotu budeme muset uchopit programově. Proto nastavte rozevírací seznam Zdroj na Hodnotu "Žádný", kliknutím na tlačítko Přidat přidejte parametr a potom klikněte na TLAČÍTKO OK.
Obrázek 10: Přidání parametru filtru do UserId
sloupce (kliknutím zobrazíte obrázek v plné velikosti)
Po kliknutí na OK se vrátíte na obrazovku zobrazenou na obrázku 9. Tentokrát by ale dotaz SQL v dolní části obrazovky měl obsahovat klauzuli WHERE
. Kliknutím na Další přejděte na obrazovku Test Query (Testovací dotaz). Tady můžete dotaz spustit a zobrazit výsledky. Dokončete průvodce kliknutím na Dokončit.
Po dokončení Průvodce konfigurací zdroje dat vytvoří Visual Studio ovládací prvek SqlDataSource na základě nastavení zadaných v průvodci. Kromě toho ručně přidá BoundFields do DetailsView pro každý sloupec vrácený SqlDataSource .SelectCommand
Není nutné zobrazovat UserId
pole v zobrazení DetailsView, protože uživatel nemusí znát tuto hodnotu. Toto pole můžete odebrat přímo z deklarativní značky ovládacího prvku DetailsView nebo kliknutím na odkaz Upravit pole z jeho inteligentní značky.
V tomto okamžiku by deklarativní kód stránky měl vypadat nějak takto:
<asp:DetailsView ID="UserProfile" runat="server"
AutoGenerateRows="False" DataKeyNames="UserId"
DataSourceID="UserProfileDataSource">
<Fields>
<asp:BoundField DataField="HomeTown" HeaderText="HomeTown"
SortExpression="HomeTown" />
<asp:BoundField DataField="HomepageUrl" HeaderText="HomepageUrl"
SortExpression="HomepageUrl" />
<asp:BoundField DataField="Signature" HeaderText="Signature"
SortExpression="Signature" />
</Fields>
</asp:DetailsView>
<asp:SqlDataSource ID="UserProfileDataSource" runat="server"
ConnectionString="<%$ ConnectionStrings:SecurityTutorialsConnectionString %>"
SelectCommand="SELECT [UserId], [HomeTown], [HomepageUrl], [Signature] FROM
[UserProfiles] WHERE ([UserId] = @UserId)">
<SelectParameters>
<asp:Parameter Name="UserId" Type="Object" />
</SelectParameters>
</asp:SqlDataSource>
Před výběrem dat musíme programově nastavit parametr ovládacího prvku UserId
SqlDataSource na aktuálně přihlášeného uživatele UserId
. Toho lze dosáhnout vytvořením obslužné rutiny události pro událost SqlDataSource Selecting
a přidáním následujícího kódu:
protected void UserProfileDataSource_Selecting(object sender,
SqlDataSourceSelectingEventArgs e)
{
// Get a reference to the currently logged on user
MembershipUser currentUser = Membership.GetUser();
// Determine the currently logged on user's UserId value
Guid currentUserId = (Guid)currentUser.ProviderUserKey;
// Assign the currently logged on user's UserId to the @UserId parameter
e.Command.Parameters["@UserId"].Value = currentUserId;
}
Výše uvedený kód začíná získáním odkazu na aktuálně přihlášeného uživatele voláním Membership
metody třídy GetUser
. Vrátí objekt MembershipUser
, jehož ProviderUserKey
vlastnost obsahuje UserId
. Hodnota UserId
se pak přiřadí k parametru SqlDataSource @UserId
.
Poznámka
Metoda Membership.GetUser()
vrátí informace o aktuálně přihlášeného uživatele. Pokud stránku navštíví anonymní uživatel, vrátí hodnotu null
. V takovém případě to při pokusu o přečtení ProviderUserKey
vlastnosti povede NullReferenceException
k následujícímu řádku kódu. Samozřejmě se nemusíme starat o Membership.GetUser()
vrácení null
hodnoty na AdditionalUserInfo.aspx
stránce, protože jsme v předchozím kurzu nakonfigurovali autorizaci url tak, aby k ASP.NET prostředkům v této složce měli přístup jenom ověření uživatelé. Pokud potřebujete získat přístup k informacím o aktuálně přihlášených uživatelích na stránce, kde je povolený anonymní přístup, nezapomeňte před odkazováním na jeho vlastnosti zkontrolovat, zdanull MembershipUser
je objekt vrácen z GetUser()
metody.
Pokud stránku navštívíte AdditionalUserInfo.aspx
v prohlížeči, zobrazí se prázdná stránka, protože jsme ještě do tabulky nepřidáli žádné řádky UserProfiles
. V kroku 6 se podíváme na to, jak přizpůsobit ovládací prvek CreateUserWizard tak, aby automaticky přidal nový řádek do UserProfiles
tabulky při vytvoření nového uživatelského účtu. Prozatím ale budeme muset ručně vytvořit záznam v tabulce.
V sadě Visual Studio přejděte do Průzkumníka databáze a rozbalte složku Tabulky. Klikněte pravým tlačítkem na aspnet_Users
tabulku a zvolte Zobrazit data tabulky, aby se zobrazily záznamy v tabulce. To samé udělejte pro UserProfiles
tabulku. Na obrázku 11 jsou tyto výsledky zobrazeny ve svislém dlaždici. V mé databázi jsou aktuálně aspnet_Users
záznamy pro Bruce, Freda a Titoa, ale v UserProfiles
tabulce nejsou žádné záznamy.
Obrázek 11: Zobrazí se obsah aspnet_Users
tabulek a UserProfiles
(kliknutím zobrazíte obrázek v plné velikosti)
Přidejte do tabulky nový záznam tak, že UserProfiles
ručně zadáte hodnoty polí HomeTown
, HomepageUrl
a Signature
. Nejjednodušší způsob, jak získat platnou UserId
hodnotu v novém UserProfiles
záznamu, je vybrat UserId
pole z konkrétního uživatelského účtu v aspnet_Users
tabulce a zkopírovat ho UserId
a vložit do pole v UserProfiles
. Obrázek 12 znázorňuje UserProfiles
tabulku po přidání nového záznamu pro Bruce.
Obrázek 12: Záznam byl přidán do UserProfiles
pro Bruce (kliknutím zobrazíte obrázek v plné velikosti)
Vraťte se na AdditionalUserInfo.aspx
stránku, jste přihlášeni jako Bruce. Jak ukazuje obrázek 13, zobrazí se nastavení Bruce.
Obrázek 13: Aktuálně hostujícímu uživateli se zobrazí jeho nastavení (kliknutím zobrazíte obrázek v plné velikosti)
Poznámka
Pokračujte a ručně přidejte záznamy do UserProfiles
tabulky pro každého uživatele členství. V kroku 6 se podíváme na to, jak přizpůsobit ovládací prvek CreateUserWizard automaticky přidat nový řádek do UserProfiles
tabulky při vytvoření nového uživatelského účtu.
Krok 3: Povolení uživateli upravovat své domovské město, domovskou stránku a podpis
V tomto okamžiku může aktuálně přihlášený uživatel zobrazit nastavení svého domovského města, domovské stránky a podpisu, ale zatím je nemůže upravit. Pojďme aktualizovat ovládací prvek DetailsView, aby bylo možné data upravovat.
První věc, kterou musíme udělat, je přidat UpdateCommand
pro SqlDataSource a zadat UPDATE
příkaz, který se má provést, a jeho odpovídající parametry. Vyberte SqlDataSource a v okno Vlastnosti kliknutím na tři tečky vedle vlastnosti UpdateQuery otevřete dialogové okno Editor příkazů a parametrů. Do textového pole zadejte následující UPDATE
příkaz:
UPDATE UserProfiles SET
HomeTown = @HomeTown,
HomepageUrl = @HomepageUrl,
Signature = @Signature
WHERE UserId = @UserId
Potom klikněte na tlačítko Aktualizovat parametry, které vytvoří parametr v kolekci ovládacího prvku UpdateParameters
SqlDataSource pro každý z parametrů v příkazu UPDATE
. Ponechte zdroj pro všechny parametry nastavený na Žádný a kliknutím na tlačítko OK dokončete dialogové okno.
Obrázek 14: Určení UpdateCommand
a UpdateParameters
(Kliknutím zobrazíte obrázek v plné velikosti)
Díky doplňkům, které jsme provedli v ovládacím prvku SqlDataSource, může ovládací prvek DetailsView nyní podporovat úpravy. V inteligentní značce DetailsView zaškrtněte políčko Povolit úpravy. Tím se do kolekce ovládacího prvku Fields
přidá CommandField s jeho ShowEditButton
vlastností nastavenou na True. Tím se vykreslí tlačítko Upravit, když se DetailsView zobrazí v režimu jen pro čtení a tlačítka Aktualizovat a Zrušit, když se zobrazí v režimu úprav. Místo toho, aby uživatel musel kliknout na Upravit, ale můžeme detailsView vykreslit ve stavu "vždy upravitelné" nastavením vlastnosti DetailsView ovládacího prvku DefaultMode
na Edit
.
S těmito změnami by deklarativní kód ovládacího prvku DetailsView měl vypadat podobně jako následující:
<asp:DetailsView ID="UserProfile" runat="server"
AutoGenerateRows="False" DataKeyNames="UserId"
DataSourceID="UserProfileDataSource" DefaultMode="Edit">
<Fields>
<asp:BoundField DataField="HomeTown" HeaderText="HomeTown"
SortExpression="HomeTown" />
<asp:BoundField DataField="HomepageUrl" HeaderText="HomepageUrl"
SortExpression="HomepageUrl" />
<asp:BoundField DataField="Signature" HeaderText="Signature"
SortExpression="Signature" />
<asp:CommandField ShowEditButton="True" />
</Fields>
</asp:DetailsView>
Všimněte si přidání CommandField a DefaultMode
vlastnosti .
Pokračujte a otestujte tuto stránku v prohlížeči. Při návštěvě uživatele, který má odpovídající záznam v UserProfiles
, se nastavení uživatele zobrazí v upravitelném rozhraní.
Obrázek 15: DetailsView vykreslí upravitelné rozhraní (kliknutím zobrazíte obrázek v plné velikosti)
Zkuste změnit hodnoty a kliknout na tlačítko Aktualizovat. Vypadá to, jako by se nic nestalo. Dojde k zpětnému odeslání a hodnoty se uloží do databáze, ale neexistuje žádná vizuální zpětná vazba, že k uložení došlo.
Pokud chcete tento problém napravit, vraťte se do sady Visual Studio a přidejte nad DetailsView ovládací prvek Popisek. Nastavte jeho ID
hodnotu na SettingsUpdatedMessage
, jeho Text
vlastnost na "Vaše nastavení byla aktualizována" a jeho Visible
vlastnosti a EnableViewState
na false
.
<asp:Label ID="SettingsUpdatedMessage" runat="server"
Text="Your settings have been updated."
EnableViewState="false"
Visible="false"></asp:Label>
Popisek musíme zobrazit SettingsUpdatedMessage
vždy, když se detailsView aktualizuje. Chcete-li toho dosáhnout, vytvořte obslužnou rutinu události pro událost DetailsView ItemUpdated
a přidejte následující kód:
protected void UserProfile_ItemUpdated(object sender, DetailsViewUpdatedEventArgs e)
{
SettingsUpdatedMessage.Visible = true;
}
Vraťte se na AdditionalUserInfo.aspx
stránku prostřednictvím prohlížeče a aktualizujte data. Tentokrát se zobrazí užitečná stavová zpráva.
Obrázek 16: Při aktualizaci nastavení se zobrazí krátká zpráva (kliknutím zobrazíte obrázek v plné velikosti)
Poznámka
Rozhraní pro úpravy ovládacího prvku DetailsView ponechá spoustu požadovaných. Používá textová pole standardní velikosti, ale pole Podpis by mělo být pravděpodobně víceřádkové textové pole. RegularExpressionValidator by se měl použít k zajištění, že adresa URL domovské stránky, pokud je zadána, začíná na "http://" nebo "https://". Navíc, protože DetailsView ovládací prvek má jeho DefaultMode
vlastnost nastavena na Edit
, Zrušit tlačítko nedělá nic. Měl by se buď odebrat, nebo po kliknutí přesměrovat uživatele na jinou stránku (například ~/Default.aspx
). Tato vylepšení nechávám jako cvičení pro čtenáře.
Přidání odkazu naAdditionalUserInfo.aspx
stránku na stránce předlohy
V současné době web neposkytuje žádné odkazy na AdditionalUserInfo.aspx
stránku. Jediný způsob, jak se k němu dostat, je zadat adresu URL stránky přímo do adresního řádku prohlížeče. Pojďme přidat odkaz na tuto stránku na stránce předlohy Site.master
.
Vzpomeňte si, že stránka předlohy obsahuje ovládací prvek LoginView Web v jeho LoginContent
ContentPlaceHolder, který zobrazuje různé značky pro ověřené a anonymní návštěvníky. Aktualizujte ovládací prvky LoginView tak, LoggedInTemplate
aby obsahovaly odkaz na AdditionalUserInfo.aspx
stránku. Po provedení těchto změn by měl deklarativní kód ovládacího prvku LoginView vypadat podobně jako následující:
<asp:LoginView ID="LoginView1" runat="server">
<LoggedInTemplate>
Welcome back,
<asp:LoginName ID="LoginName1" runat="server" />.
<br />
<asp:HyperLink ID="lnkUpdateSettings" runat="server"
NavigateUrl="~/Membership/AdditionalUserInfo.aspx">
Update Your Settings</asp:HyperLink>
</LoggedInTemplate>
<AnonymousTemplate>
Hello, stranger.
</AnonymousTemplate>
</asp:LoginView>
Všimněte si přidání lnkUpdateSettings
ovládacího prvku HyperLink do .LoggedInTemplate
S tímto odkazem můžou ověření uživatelé rychle přejít na stránku a zobrazit a upravit nastavení svého domovského města, domovské stránky a podpisu.
Krok 4: Přidání nových komentářů k knize hostů
Na Guestbook.aspx
této stránce můžou ověření uživatelé zobrazit knihu hostů a přidat komentář. Začněme vytvořením rozhraní pro přidání nových komentářů k knize hostů.
Guestbook.aspx
Otevřete stránku v sadě Visual Studio a vytvořte uživatelské rozhraní, které se skládá ze dvou ovládacích prvků TextBox, jednoho pro předmět nového komentáře a jednoho pro jeho text. Nastavte vlastnost prvního ovládacího prvku TextBox na Subject
a jeho Columns
vlastnost na hodnotu 40, hodnotu sekundy ID
na Body
hodnotu , její TextMode
hodnotu na MultiLine
hodnotu a Width
vlastnosti a Rows
na hodnotu 95 % a 8.ID
Uživatelské rozhraní dokončíte tak, že přidáte webový ovládací prvek Tlačítko s názvem PostCommentButton
a jeho vlastnost nastavíte Text
na "Publikovat komentář".
Vzhledem k tomu, že každý komentář k knize hostů vyžaduje předmět a text, přidejte requiredFieldValidator pro každé textové pole. ValidationGroup
Nastavte vlastnost těchto ovládacích prvků na "EnterComment"; podobně nastavte PostCommentButton
vlastnost ovládacího prvku ValidationGroup
na "EnterComment". Další informace o asp. Ovládací prvky pro ověření v ASP.NET najdete v tématu Ověření formuláře.
Po vytvoření uživatelského rozhraní by deklarativní kód stránky měl vypadat nějak takto:
<h3>Leave a Comment</h3>
<p>
<b>Subject:</b>
<asp:RequiredFieldValidator ID="SubjectReqValidator" runat="server"
ErrorMessage="You must provide a value for Subject"
ControlToValidate="Subject" ValidationGroup="EnterComment">
</asp:RequiredFieldValidator><br/>
<asp:TextBox ID="Subject" Columns="40" runat="server"></asp:TextBox>
</p>
<p>
<b>Body:</b>
<asp:RequiredFieldValidator ID="BodyReqValidator" runat="server"
ControlToValidate="Body"
ErrorMessage="You must provide a value for Body" ValidationGroup="EnterComment">
</asp:RequiredFieldValidator><br/>
<asp:TextBox ID="Body" TextMode="MultiLine" Width="95%"
Rows="8" runat="server"></asp:TextBox>
</p>
<p>
<asp:Button ID="PostCommentButton" runat="server"
Text="Post Your Comment"
ValidationGroup="EnterComment" />
</p>
Po dokončení uživatelského rozhraní je naším dalším úkolem vložit nový záznam do GuestbookComments
tabulky po kliknutí na PostCommentButton
. Toho lze dosáhnout několika způsoby: můžeme napsat ADO.NET kód v obslužné rutině události Button Click
; můžeme přidat ovládací prvek SqlDataSource na stránku, nakonfigurovat jeho InsertCommand
a pak volat jeho Insert
metodu z Click
obslužné rutiny události; nebo můžeme vytvořit střední vrstvu, která byla zodpovědná za vkládání nových komentářů k knize hostů, a vyvolat tuto funkci z Click
obslužné rutiny události. Vzhledem k tomu, že jsme se v kroku 3 podívali na použití SqlDataSource, použijeme tady ADO.NET kód.
Poznámka
Třídy ADO.NET používané pro programový přístup k datům z databáze Microsoft SQL Server jsou umístěny v System.Data.SqlClient
oboru názvů . Možná budete muset importovat tento obor názvů do třídy kódu na pozadí stránky (tj. using System.Data.SqlClient;
).
Vytvořte obslužnou rutinu PostCommentButton
Click
události pro událost a přidejte následující kód:
protected void PostCommentButton_Click(object sender, EventArgs e)
{
if (!Page.IsValid)
return;
// Determine the currently logged on user's UserId
MembershipUser currentUser = Membership.GetUser();
Guid currentUserId = (Guid)currentUser.ProviderUserKey;
// Insert a new record into GuestbookComments
string connectionString =
ConfigurationManager.ConnectionStrings["SecurityTutorialsConnectionString"].ConnectionString;
string insertSql = "INSERT INTO GuestbookComments(Subject, Body, UserId) VALUES(@Subject,
@Body, @UserId)";
using (SqlConnection myConnection = new SqlConnection(connectionString))
{
myConnection.Open();
SqlCommand myCommand = new SqlCommand(insertSql, myConnection);
myCommand.Parameters.AddWithValue("@Subject", Subject.Text.Trim());
myCommand.Parameters.AddWithValue("@Body", Body.Text.Trim());
myCommand.Parameters.AddWithValue("@UserId", currentUserId);
myCommand.ExecuteNonQuery();
myConnection.Close();
}
// "Reset" the Subject and Body TextBoxes
Subject.Text = string.Empty;
Body.Text = string.Empty;
}
Obslužná rutina Click
události začíná kontrolou, zda jsou data zadaná uživatelem platná. Pokud tomu tak není, obslužná rutina události se před vložením záznamu ukončí. Za předpokladu, že jsou zadaná data platná, hodnota aktuálně přihlášeného uživatele UserId
se načte a uloží do currentUserId
místní proměnné. Tato hodnota je potřebná, protože při vkládání záznamu UserId
do GuestbookComments
musíme zadat hodnotu .
Potom se načte Web.config
připojovací řetězec pro SecurityTutorials
databázi a zadá se INSERT
příkaz SQL. Objekt SqlConnection
se pak vytvoří a otevře. SqlCommand
Dále se vytvoří objekt a přiřadí se hodnoty parametrů použitých v INSERT
dotazu. Příkaz INSERT
se pak spustí a připojení se ukončí. Na konci obslužné rutiny události jsou Subject
vlastnosti a Body
TextBoxes Text
vymazány, aby hodnoty uživatele nebyly zachovány v rámci zpětného odeslání.
Pokračujte a otestujte tuto stránku v prohlížeči. Vzhledem k tomu, že se tato stránka nachází ve Membership
složce, není přístupná anonymním návštěvníkům. Proto se budete muset nejprve přihlásit (pokud jste to ještě neudělali). Do textových polí a zadejte hodnotu Subject
a a klikněte na PostCommentButton
tlačítko .Body
To způsobí přidání nového záznamu do GuestbookComments
. Při zpětném odeslání se předmět a text, které jste zadali, vymažou z textových polí.
Po kliknutí na PostCommentButton
tlačítko se žádná vizuální zpětná vazba, že byl komentář přidán do knihy hostů. Tuto stránku ještě musíme aktualizovat, aby se zobrazily existující komentáře k knize hostů, což uděláme v kroku 5. Jakmile toho dosáhneme, právě přidaný komentář se zobrazí v seznamu komentářů a poskytne odpovídající vizuální zpětnou vazbu. Prozatím zkontrolujte obsah tabulky tak, že zkontrolujete, GuestbookComments
jestli byl váš komentář k knize hostů uložený.
Obrázek 17 znázorňuje obsah GuestbookComments
tabulky po tom, co zbyly dva komentáře.
Obrázek 17: V tabulce můžete vidět komentáře GuestbookComments
k knize hostů (kliknutím zobrazíte obrázek v plné velikosti)
Poznámka
Pokud se uživatel pokusí vložit komentář k knize hostů, který obsahuje potenciálně nebezpečné kódy ( například HTML), ASP.NET vyvolá .HttpRequestValidationException
Další informace o této výjimce, proč je vyvolána a jak uživatelům povolit odesílání potenciálně nebezpečných hodnot, najdete v dokumentu white paper pro žádosti o ověření.
Krok 5: Výpis existujících komentářů k knize hostů
Kromě ponechání komentářů by uživatel, který navštíví Guestbook.aspx
stránku, měl mít také možnost zobrazit stávající komentáře k knize hostů. Chcete-li toho dosáhnout, přidejte ovládací prvek ListView s názvem CommentList
do dolní části stránky.
Poznámka
Ovládací prvek ListView je novinkou ASP.NET verze 3.5. Je navržen tak, aby zobrazoval seznam položek ve velmi přizpůsobitelném a flexibilním rozložení, ale přesto nabízí integrované funkce pro úpravy, vkládání, odstraňování, stránkování a řazení, jako je GridView. Pokud používáte ASP.NET 2.0, budete muset místo toho použít ovládací prvek DataList nebo Repeater. Další informace o použití ListView najdete v položce blogu Scotta Guthrieho, Ovládací prvek asp:ListView a můj článek Zobrazení dat pomocí ovládacího prvku ListView.
Otevřete inteligentní značku ListView a v rozevíracím seznamu Zvolit zdroj dat vytvořte vazbu ovládacího prvku na nový zdroj dat. Jak jsme viděli v kroku 2, spustí se Průvodce konfigurací zdroje dat. Vyberte ikonu Databáze, pojmenujte výsledný zdroj dat SqlDataSource CommentsDataSource
a klikněte na OK. Potom vyberte SecurityTutorialsConnectionString
připojovací řetězec z rozevíracího seznamu a klikněte na Další.
V tomto okamžiku v kroku 2 jsme zadali data, která se mají dotazovat, tak, že jsme z rozevíracího seznamu vybrali UserProfiles
tabulku a vybrali sloupce, které se mají vrátit (podívejte se zpět na Obrázek 9). Tentokrát ale chceme vytvořit příkaz SQL, který stáhne nejen záznamy z GuestbookComments
, ale také domovského města komentátora, domovské stránky, podpisu a uživatelského jména. Proto vyberte přepínač "Zadejte vlastní příkaz SQL nebo uloženou proceduru" a klikněte na Další.
Zobrazí se obrazovka Definovat vlastní příkazy nebo uložené procedury. Kliknutím na tlačítko Tvůrce dotazů sestavte dotaz graficky. Tvůrce dotazů začne tím, že nás vyzve k zadání tabulek, ze které se chceme dotazovat. GuestbookComments
Vyberte tabulky , UserProfiles
a aspnet_Users
a klikněte na OK. Tím se na návrhovou plochu přidají všechny tři tabulky. Vzhledem k tomu, že mezi tabulkami , UserProfiles
a aspnet_Users
existují omezení cizího GuestbookComments
klíče, Tvůrce dotazů tyto tabulky automaticky JOIN
vytvoří.
Zbývá jen zadat sloupce, které se mají vrátit. GuestbookComments
V tabulce vyberte Subject
sloupce , Body
a CommentDate
, vraťte HomepageUrl
HomeTown
sloupce , a Signature
z UserProfiles
tabulky a vraťte UserName
hodnotu z aspnet_Users
tabulky . Na konec SELECT
dotazu také přidejte ,ORDER BY CommentDate DESC
aby se jako první vrátily nejnovější příspěvky. Po provedení těchto výběrů by mělo rozhraní Tvůrce dotazů vypadat podobně jako na snímku obrazovky na obrázku 18.
Obrázek 18: Vytvořený dotaz JOIN
s GuestbookComments
tabulkami , UserProfiles
a aspnet_Users
(kliknutím zobrazíte obrázek v plné velikosti)
Kliknutím na OK zavřete okno Tvůrce dotazů a vraťte se na obrazovku Definovat vlastní příkazy nebo uložené procedury. Kliknutím na Další přejděte na obrazovku Testovací dotaz, kde můžete zobrazit výsledky dotazu kliknutím na tlačítko Testovací dotaz. Až budete připraveni, kliknutím na Dokončit dokončete průvodce Konfigurací zdroje dat.
Po dokončení průvodce Konfigurací zdroje dat v kroku 2 byla kolekce přidruženého Fields
ovládacího prvku DetailsView aktualizována tak, aby zahrnovala BoundField pro každý sloupec vrácený objektem SelectCommand
. ListView, nicméně, zůstává beze změny; stále potřebujeme definovat jeho rozložení. Rozložení ListView lze vytvořit ručně prostřednictvím deklarativní značky nebo z možnosti "Konfigurovat ListView" v jeho inteligentní značce. Obvykle dávám přednost ručnímu definování značky, ale použijte jakoukoli metodu, která je pro vás nejpřirozenější.
Nakonec jsem pro ovládací prvek ListView používal(a) následující LayoutTemplate
, ItemTemplate
a ItemSeparatorTemplate
:
<asp:ListView ID="CommentList" runat="server" DataSourceID="CommentsDataSource">
<LayoutTemplate>
<span ID="itemPlaceholder" runat="server" />
<p>
<asp:DataPager ID="DataPager1" runat="server">
<Fields>
<asp:NextPreviousPagerField ButtonType="Button"
ShowFirstPageButton="True"
ShowLastPageButton="True" />
</Fields>
</asp:DataPager>
</p>
</LayoutTemplate>
<ItemTemplate>
<h4><asp:Label ID="SubjectLabel" runat="server"
Text='<%# Eval("Subject") %>' /></h4>
<asp:Label ID="BodyLabel" runat="server"
Text='<%# Eval("Body").ToString().Replace(Environment.NewLine, "<br />") %>' />
<p>
---<br />
<asp:Label ID="SignatureLabel" Font-Italic="true" runat="server"
Text='<%# Eval("Signature") %>' />
<br />
<br />
My Home Town:
<asp:Label ID="HomeTownLabel" runat="server"
Text='<%# Eval("HomeTown") %>' />
<br />
My Homepage:
<asp:HyperLink ID="HomepageUrlLink" runat="server"
NavigateUrl='<%# Eval("HomepageUrl") %>'
Text='<%# Eval("HomepageUrl") %>' />
</p>
<p align="center">
Posted by
<asp:Label ID="UserNameLabel" runat="server"
Text='<%# Eval("UserName") %>' /> on
<asp:Label ID="CommentDateLabel" runat="server"
Text='<%# Eval("CommentDate") %>' />
</p>
</ItemTemplate>
<ItemSeparatorTemplate>
<hr />
</ItemSeparatorTemplate>
</asp:ListView>
Definuje LayoutTemplate
značky generované ovládacím prvku, zatímco ItemTemplate
vykresluje každou položku vrácenou SqlDataSource. Výsledný ItemTemplate
kód se umístí do LayoutTemplate
itemPlaceholder
ovládacího prvku . Kromě itemPlaceholder
, LayoutTemplate
zahrnuje DataPager ovládací prvek, který omezuje ListView na zobrazení pouze 10 komentářů k knize hostů na stránku (výchozí) a vykresluje stránkovací rozhraní.
My ItemTemplate
zobrazí každý komentář k knize hostů v elementu <h4>
s textem umístěným pod předmětem. Všimněte si, že syntaxe používaná k zobrazení textu převezme data vrácená příkazem Eval("Body")
databinding, převede je na řetězec a nahradí konce řádků elementem <br />
. Tento převod je nutný k zobrazení konců řádků zadaných při odeslání komentáře, protože kód HTML ignoruje prázdné znaky. Podpis uživatele se zobrazuje kurzívou pod textem, za kterým následuje rodné město uživatele, odkaz na jeho domovskou stránku, datum a čas, kdy byl komentář proveden, a uživatelské jméno osoby, která komentář opustila.
Chvíli si stránku prohlédněte v prohlížeči. Tady by se měly zobrazit komentáře, které jste přidali do knihy hostů v kroku 5.
Obrázek 19: Guestbook.aspx
Nyní zobrazí komentáře k knize hostů (kliknutím zobrazíte obrázek v plné velikosti).
Zkuste do knihy hostů přidat nový komentář. Po kliknutí na PostCommentButton
tlačítko se stránka vrátí zpět a komentář se přidá do databáze, ale ovládací prvek ListView se neaktualizuje tak, aby zobrazoval nový komentář. To se dá opravit některým z těchto:
- Aktualizace obslužné
PostCommentButton
rutiny události tlačítkaClick
tak, aby po vložení nového komentáře do databáze vyvolala metodu ovládacího prvkuDataBind()
ListView nebo - Nastavení vlastnosti ovládacího prvku
EnableViewState
ListView nafalse
. Tento přístup funguje, protože zakázáním stavu zobrazení ovládacího prvku se musí znovu připojit k podkladovým datům při každém zpětném odeslání.
Obě techniky ilustruje web kurzu ke stažení z tohoto kurzu. Vlastnost ovládacího prvku EnableViewState
ListView a false
kód potřebný k programovému obnovení vazby dat na ListView se nachází v obslužné rutině Click
události, ale je zakomentován.
Poznámka
AdditionalUserInfo.aspx
V současné době stránka umožňuje uživateli zobrazit a upravit nastavení svého domovského města, domovské stránky a podpisu. Může být vhodné aktualizovat AdditionalUserInfo.aspx
, aby se zobrazily komentáře k knize hostů přihlášeného uživatele. To znamená, že kromě zkoumání a úpravy svých informací může uživatel navštívit AdditionalUserInfo.aspx
stránku, aby viděl, jaké komentáře k knize hostů udělal v minulosti. Nechávám to jako cvičení pro čtenáře, který se o to zajímá.
Krok 6: Přizpůsobení ovládacího prvku CreateUserWizard tak, aby zahrnoval rozhraní pro domovské město, domovskou stránku a podpis
Dotaz SELECT
, který Guestbook.aspx
stránka používá, používá ke INNER JOIN
kombinování souvisejících záznamů mezi tabulkami GuestbookComments
, UserProfiles
a aspnet_Users
. Pokud uživatel, který nemá žádný záznam v UserProfiles
, vytvoří komentář k knize hostů, komentář se nezobrazí v ListView, protože INNER JOIN
vrátí GuestbookComments
pouze záznamy, pokud existují odpovídající záznamy v UserProfiles
a aspnet_Users
. A jak jsme viděli v kroku 3, pokud uživatel záznam nemá, UserProfiles
nemůže zobrazit ani upravit nastavení na AdditionalUserInfo.aspx
stránce.
Netřeba říkat, že vzhledem k našim rozhodnutím o návrhu je důležité, aby každý uživatelský účet v systému členství měl v UserProfiles
tabulce odpovídající záznam. Chceme, aby byl odpovídající záznam přidán do UserProfiles
pokaždé, když se vytvoří nový uživatelský účet Membership prostřednictvím Průvodce uživatelem CreateUserWizard.
Jak je popsáno v kurzu Vytváření uživatelských účtů , po vytvoření nového uživatelského účtu Členství vyvolá ovládací prvek CreateUserWizard svou CreatedUser
událost. Pro tuto událost můžeme vytvořit obslužnou rutinu události, získat Id uživatele pro právě vytvořeného uživatele a potom vložit záznam do UserProfiles
tabulky s výchozími hodnotami sloupců HomeTown
, HomepageUrl
a Signature
. Navíc je možné uživatele vyzvat k zadání těchto hodnot přizpůsobením rozhraní ovládacího prvku CreateUserWizard tak, aby zahrnovalo další textová pole.
Nejprve se podíváme na to, jak do tabulky v obslužné rutině CreatedUser
události přidat nový řádek UserProfiles
s výchozími hodnotami. Potom uvidíme, jak přizpůsobit uživatelské rozhraní ovládacího prvku CreateUserWizard tak, aby zahrnovalo další pole formuláře pro shromažďování domovského města nového uživatele, domovské stránky a podpisu.
Přidání výchozího řádku doUserProfiles
V kurzu Vytváření uživatelských účtů jsme na CreatingUserAccounts.aspx
stránku ve Membership
složce přidali ovládací prvek CreateUserWizard. Aby ovládací prvek CreateUserWizard přidal záznam do UserProfiles
tabulky při vytvoření uživatelského účtu, musíme aktualizovat funkce ovládacího prvku CreateUserWizard. Místo toho, abychom tyto změny CreatingUserAccounts.aspx
na stránce udělali, přidáme na EnhancedCreateUserWizard.aspx
stránku nový ovládací prvek CreateUserWizard a provedeme změny pro tento kurz tam.
EnhancedCreateUserWizard.aspx
Otevřete stránku v sadě Visual Studio a přetáhněte ovládací prvek CreateUserWizard ze sady nástrojů na stránku. Nastavte vlastnost ovládacího prvku ID
CreateUserWizard na NewUserWizard
. Jak jsme probrali v kurzu Vytváření uživatelských účtů, výchozí uživatelské rozhraní CreateUserWizard vyzve návštěvníka k zadání potřebných informací. Jakmile jsou tyto informace dodány, ovládací prvek interně vytvoří nový uživatelský účet v rámci členství, aniž by bylo nutné napsat jediný řádek kódu.
CreateUserWizard Ovládací prvek vyvolá řadu událostí během jeho pracovního postupu. Jakmile návštěvník poskytne informace o požadavku a odešle formulář, aktivuje ovládací prvek CreateUserWizard svou CreatingUser
událost. Pokud během procesu vytváření dojde k problému, CreateUserError
událost se aktivuje. Pokud se však uživatel úspěšně vytvoří, CreatedUser
událost se vyvolá. V kurzu Vytváření uživatelských účtů jsme pro událost vytvořili obslužnou rutinu CreatingUser
události, abychom měli jistotu, že zadané uživatelské jméno neobsahuje žádné úvodní nebo koncové mezery a že se uživatelské jméno nikde v hesle nezobrazí.
Abychom mohli přidat řádek do UserProfiles
tabulky pro právě vytvořeného uživatele, musíme pro událost vytvořit obslužnou rutinu CreatedUser
události. V době, kdy se CreatedUser
událost aktivuje, už byl uživatelský účet vytvořen v rámci členství, což nám umožňuje načíst hodnotu UserId účtu.
Vytvořte obslužnou rutinu NewUserWizard
CreatedUser
události pro událost a přidejte následující kód:
protected void NewUserWizard_CreatedUser(object sender, EventArgs e)
{
// Get the UserId of the just-added user
MembershipUser newUser = Membership.GetUser(NewUserWizard.UserName);
Guid newUserId = (Guid)newUser.ProviderUserKey;
// Insert a new record into UserProfiles
string connectionString =
ConfigurationManager.ConnectionStrings["SecurityTutorialsConnectionString"].ConnectionString;
string insertSql = "INSERT INTO UserProfiles(UserId, HomeTown, HomepageUrl,
Signature) VALUES(@UserId, @HomeTown, @HomepageUrl, @Signature)";
using (SqlConnection myConnection = new SqlConnection(connectionString))
{
myConnection.Open();
SqlCommand myCommand = new SqlCommand(insertSql, myConnection);
myCommand.Parameters.AddWithValue("@UserId", newUserId);
myCommand.Parameters.AddWithValue("@HomeTown", DBNull.Value);
myCommand.Parameters.AddWithValue("@HomepageUrl", DBNull.Value);
myCommand.Parameters.AddWithValue("@Signature", DBNull.Value);
myCommand.ExecuteNonQuery();
myConnection.Close();
}
}
Výše uvedený kód se načte id uživatele právě přidaného uživatelského účtu. Toho se dosahuje pomocí Membership.GetUser(username)
metody k vrácení informací o konkrétním uživateli a potom pomocí ProviderUserKey
vlastnosti k načtení id uživatele. Uživatelské jméno zadané uživatelem v ovládacím prvku CreateUserWizard je k dispozici prostřednictvím jeho UserName
vlastnosti.
Dále se připojovací řetězec načte z Web.config
a zadá se INSERT
příkaz . Vytvoří se instance potřebných ADO.NET objektů a provede se příkaz . Kód přiřadí DBNull
instanci parametrům @HomeTown
, @HomepageUrl
a @Signature
, což má za následek vložení databázových NULL
hodnot pro HomeTown
pole , HomepageUrl
a Signature
.
Přejděte na EnhancedCreateUserWizard.aspx
stránku v prohlížeči a vytvořte nový uživatelský účet. Potom se vraťte do sady Visual Studio a prozkoumejte obsah aspnet_Users
tabulek a UserProfiles
(jako jsme to udělali na obrázku 12). Nový uživatelský účet by se měl zobrazit v aspnet_Users
a odpovídající UserProfiles
řádek (s NULL
hodnotami pro HomeTown
, HomepageUrl
a Signature
).
Obrázek 20: Byl přidán nový uživatelský účet a UserProfiles
záznam (kliknutím zobrazíte obrázek v plné velikosti)
Jakmile návštěvník zadá informace o svém novém účtu a klikne na tlačítko Vytvořit uživatele, vytvoří se uživatelský účet a do UserProfiles
tabulky se přidá řádek. Průvodce CreateUserWizard pak zobrazí svou CompleteWizardStep
, která zobrazí zprávu o úspěchu a tlačítko Pokračovat. Kliknutí na tlačítko Pokračovat způsobí zpětné odeslání, ale žádná akce se neprovedou a uživatel se na EnhancedCreateUserWizard.aspx
stránce zasekne.
Prostřednictvím vlastnosti ovládacího ContinueDestinationPageUrl
prvku CreateUserWizard můžeme zadat adresu URL, na které se má uživatel po kliknutí na tlačítko Pokračovat. Nastavte ContinueDestinationPageUrl
vlastnost na ~/Membership/AdditionalUserInfo.aspx. Tím se nový uživatel přesune do AdditionalUserInfo.aspx
, kde může zobrazit a aktualizovat svá nastavení.
Přizpůsobení rozhraní CreateUserWizard pro zobrazení výzvy k zadání domovské stránky, domovské stránky a podpisu nového uživatele
Výchozí rozhraní ovládacího prvku CreateUserWizard je dostatečné pro jednoduché scénáře vytváření účtů, kde je potřeba shromažďovat pouze základní informace o uživatelském účtu, jako je uživatelské jméno, heslo a e-mail. Ale co kdybychom chtěli při vytváření účtu vyzvat návštěvníka, aby zadal své domovské město, domovskou stránku a podpis? Je možné přizpůsobit rozhraní ovládacího prvku CreateUserWizard pro shromažďování dalších informací při registraci a tyto informace mohou být použity v obslužné rutině CreatedUser
události k vložení dalších záznamů do podkladové databáze.
Ovládací prvek CreateUserWizard rozšiřuje ovládací prvek průvodce ASP.NET, což je ovládací prvek, který umožňuje vývojáři stránky definovat řadu uspořádaných WizardSteps
. Ovládací prvek Průvodce vykreslí aktivní krok a poskytuje navigační rozhraní, které návštěvníku umožňuje procházet těmito kroky. Ovládací prvek Průvodce je ideální pro rozdělení dlouhé úlohy do několika krátkých kroků. Další informace o ovládacím prvku Průvodce najdete v tématu Vytvoření podrobného uživatelského rozhraní pomocí ovládacího prvku průvodce ASP.NET 2.0.
Výchozí značky ovládacího prvku CreateUserWizard definují dvě WizardSteps
: CreateUserWizardStep
a CompleteWizardStep
.
<asp:CreateUserWizard ID="NewUserWizard" runat="server"
ContinueDestinationPageUrl="~/Membership/AdditionalUserInfo.aspx">
<WizardSteps>
<asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
</asp:CreateUserWizardStep>
<asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server">
</asp:CompleteWizardStep>
</WizardSteps>
</asp:CreateUserWizard>
První WizardStep
, CreateUserWizardStep
vykreslí rozhraní, které zobrazí výzvu k zadání uživatelského jména, hesla, e-mailu atd. Jakmile návštěvník tyto informace poskytne a klikne na Vytvořit uživatele, zobrazí CompleteWizardStep
se zpráva o úspěchu a tlačítko Pokračovat.
Chcete-li přizpůsobit rozhraní ovládacího prvku CreateUserWizard tak, aby zahrnovalo další pole formuláře, můžeme:
Vytvoření jednoho nebo více nových
WizardStep
s, aby obsahovaly další prvky uživatelského rozhraní. Chcete-li přidat novýWizardStep
do CreateUserWizard, kliknutím na odkaz Přidat nebo odebratWizardSteps
z inteligentní značky spusťteWizardStep
Editor kolekcí. Odtud můžete přidat, odebrat nebo změnit pořadí kroků v průvodci. Toto je přístup, který použijeme v tomto kurzu.Převeďte
CreateUserWizardStep
do upravitelného objektuWizardStep
. Tím se nahradíCreateUserWizardStep
ekvivalentemWizardStep
, jehož značky definují uživatelské rozhraní, které odpovídá hodnotěCreateUserWizardStep
's.CreateUserWizardStep
WizardStep
Převodem na ovládací prvky můžeme přemístit ovládací prvky nebo do tohoto kroku přidat další prvky uživatelského rozhraní. Pokud chcete převéstCreateUserWizardStep
neboCompleteWizardStep
na upravitelnýWizardStep
, klikněte na odkaz Přizpůsobit krok vytvoření uživatele nebo Přizpůsobit dokončený krok z inteligentní značky ovládacího prvku.Použijte kombinaci výše uvedených dvou možností.
Jedna důležitá věc, kterou je třeba mít na paměti, je, že ovládací prvek CreateUserWizard spustí proces vytvoření uživatelského účtu při kliknutí na tlačítko "Vytvořit uživatele" z jeho CreateUserWizardStep
. Nezáleží na tom, jestli jsou po CreateUserWizardStep
něm další WizardStep
nebo ne.
Při přidávání vlastního WizardStep
do ovládacího prvku CreateUserWizard pro shromažďování dalších uživatelských vstupů lze vlastní WizardStep
umístit před nebo za CreateUserWizardStep
. Pokud je před CreateUserWizardStep
tím, je pro CreatedUser
obslužnou rutinu události k dispozici další uživatelský vstup shromážděný z vlastníhoWizardStep
. Pokud však vlastní WizardStep
přijde po CreateUserWizardStep
, pak v okamžiku zobrazení vlastního WizardStep
je nový uživatelský účet již vytvořen a CreatedUser
událost se již aktivovala.
Obrázek 21 znázorňuje pracovní postup, když přidaná WizardStep
hodnota předchází CreateUserWizardStep
. Vzhledem k tomu, že další informace o uživateli byly shromážděny v době, kdy CreatedUser
se událost aktivuje, stačí aktualizovat obslužnou rutinu CreatedUser
události, aby načetla tyto vstupy a použila je pro INSERT
hodnoty parametrů příkazu (místo DBNull.Value
).
Obrázek 21: Pracovní postup CreateUserWizard, když WizardStep
před (CreateUserWizardStep
kliknutím zobrazíte obrázek v plné velikosti)
Pokud je vlastní WizardStep
umístěn zaCreateUserWizardStep
, ale proces vytvoření uživatelského účtu nastane předtím, než uživatel bude moct vstoupit do svého domovského města, domovské stránky nebo podpisu. V takovém případě je potřeba tyto další informace vložit do databáze po vytvoření uživatelského účtu, jak je znázorněno na obrázku 22.
Obrázek 22: Pracovní postup CreateUserWizard, když následuje CreateUserWizardStep
další WizardStep
(kliknutím zobrazíte obrázek v plné velikosti)
Pracovní postup zobrazený na obrázku 22 čeká na vložení záznamu UserProfiles
do tabulky, dokud se krok 2 neskončí. Pokud však návštěvník zavře prohlížeč po kroku 1, dosáhneme stavu, kdy byl vytvořen uživatelský účet, ale nebyl přidán žádný záznam do UserProfiles
. Jedním z alternativních řešení je vložit záznam s NULL
výchozími hodnotami UserProfiles
CreatedUser
nebo do obslužné rutiny události (která se aktivuje po kroku 1) a po dokončení kroku 2 tento záznam aktualizovat. Tím se zajistí přidání záznamu UserProfiles
pro uživatelský účet i v případě, že uživatel ukončí proces registrace v polovině.
Pro účely tohoto kurzu vytvoříme nový WizardStep
, který nastane za objektem CreateUserWizardStep
, ale před CompleteWizardStep
. Pojďme nejprve nastavit a nakonfigurovat průvodce a pak se podíváme na kód.
Z inteligentní značky ovládacího prvku CreateUserWizard vyberte možnost Přidat nebo odebrat WizardStep
, která zobrazí WizardStep
dialogové okno Editor kolekcí. Přidejte nový WizardStep
objekt , který nastaví ID
na UserSettings
, na Title
"Vaše nastavení" a na StepType
Step
. Pak ho umístěte tak, aby se zobrazil za CreateUserWizardStep
("Registrace nového účtu") a před CompleteWizardStep
("Dokončeno"), jak je znázorněno na obrázku 23.
Obrázek 23: Přidání nového WizardStep
do ovládacího prvku CreateUserWizard (kliknutím zobrazíte obrázek v plné velikosti)
Kliknutím na OK zavřete dialogové okno Editor kolekcí WizardStep
. Nový WizardStep
je dokládá aktualizovaným deklarativním kódem ovládacího prvku CreateUserWizard:
<asp:CreateUserWizard ID="NewUserWizard" runat="server"
ContinueDestinationPageUrl="~/Membership/AdditionalUserInfo.aspx">
<WizardSteps>
<asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
</asp:CreateUserWizardStep>
<asp:WizardStep runat="server" ID="UserSettings" StepType="Step"
Title="Your Settings">
</asp:WizardStep>
<asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server">
</asp:CompleteWizardStep>
</WizardSteps>
</asp:CreateUserWizard>
Všimněte si nového <asp:WizardStep>
prvku. Potřebujeme přidat uživatelské rozhraní, abychom shromáždili domovské město, domovskou stránku a podpis nového uživatele. Tento obsah můžete zadat v deklarativní syntaxi nebo prostřednictvím Designer. Pokud chcete použít Designer, vyberte krok Vaše nastavení v rozevíracím seznamu v inteligentní značce a zobrazte krok v Designer.
Poznámka
Výběrem kroku v rozevíracím seznamu Inteligentní značka se aktualizuje vlastnost ovládacího prvku ActiveStepIndex
CreateUserWizard, která určuje index počátečního kroku. Proto pokud použijete tento rozevírací seznam k úpravě kroku "Vaše nastavení" v Designer, nezapomeňte ho nastavit zpět na "Zaregistrovat se ke svému novému účtu", aby se tento krok zobrazil, když uživatelé stránku poprvé navštívíEnhancedCreateUserWizard.aspx
.
V kroku Vaše nastavení vytvořte uživatelské rozhraní, které obsahuje tři ovládací prvky TextBox s názvem HomeTown
, HomepageUrl
a Signature
. Po vytvoření tohoto rozhraní by deklarativní kód CreateUserWizard měl vypadat podobně jako následující:
<asp:CreateUserWizard ID="NewUserWizard" runat="server"
ContinueDestinationPageUrl="~/Membership/AdditionalUserInfo.aspx">
<WizardSteps>
<asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
</asp:CreateUserWizardStep>
<asp:WizardStep runat="server" ID="UserSettings" StepType="Step"
Title="Your Settings">
<p>
<b>Home Town:</b><br />
<asp:TextBox ID="HomeTown" runat="server"></asp:TextBox>
</p>
<p>
<b>Homepage URL:</b><br />
<asp:TextBox ID="HomepageUrl" Columns="40" runat="server"></asp:TextBox>
</p>
<p>
<b>Signature:</b><br />
<asp:TextBox ID="Signature" TextMode="MultiLine" Width="95%"
Rows="5" runat="server"></asp:TextBox>
</p>
</asp:WizardStep>
<asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server">
</asp:CompleteWizardStep>
</WizardSteps>
</asp:CreateUserWizard>
Přejděte na tuto stránku v prohlížeči a vytvořte nový uživatelský účet s určením hodnot pro domovské město, domovskou stránku a podpis. Po dokončení CreateUserWizardStep
se uživatelský účet vytvoří v rozhraní členství a CreatedUser
spustí se obslužná rutina události, která přidá nový řádek do UserProfiles
, ale s hodnotou databáze NULL
pro HomeTown
, HomepageUrl
a Signature
. Hodnoty zadané pro domovské město, domovskou stránku a podpis se nikdy nepoužívají. Výsledkem je nový uživatelský účet se záznamem UserProfiles
, jehož HomeTown
pole , HomepageUrl
a Signature
ještě nebyla zadána.
Po kroku "Vaše nastavení" musíme spustit kód, který převezme hodnoty domovského města, honepage a podpisu zadané uživatelem a aktualizuje příslušný UserProfiles
záznam. Pokaždé, když uživatel přejde mezi kroky v ovládacím prvku Průvodce, aktivuje se ActiveStepChanged
událost průvodce. Pro tuto událost můžeme vytvořit obslužnou rutinu UserProfiles
události a po dokončení kroku Nastavení aktualizovat tabulku.
Přidejte obslužnou rutinu události pro událost CreateUserWizard ActiveStepChanged
a přidejte následující kód:
protected void NewUserWizard_ActiveStepChanged(object sender, EventArgs e)
{
// Have we JUST reached the Complete step?
if (NewUserWizard.ActiveStep.Title == "Complete")
{
WizardStep UserSettings = NewUserWizard.FindControl("UserSettings") as
WizardStep;
// Programmatically reference the TextBox controls
TextBox HomeTown = UserSettings.FindControl("HomeTown") as TextBox;
TextBox HomepageUrl = UserSettings.FindControl("HomepageUrl") as TextBox;
TextBox Signature = UserSettings.FindControl("Signature") as TextBox;
// Update the UserProfiles record for this user
// Get the UserId of the just-added user
MembershipUser newUser = Membership.GetUser(NewUserWizard.UserName);
Guid newUserId = (Guid)newUser.ProviderUserKey;
// Insert a new record into UserProfiles
string connectionString =
ConfigurationManager.ConnectionStrings["SecurityTutorialsConnectionString"].ConnectionString;
string updateSql = "UPDATE UserProfiles SET HomeTown = @HomeTown, HomepageUrl
= @HomepageUrl, Signature = @Signature WHERE UserId = @UserId";
using (SqlConnection myConnection = new SqlConnection(connectionString))
{
myConnection.Open();
SqlCommand myCommand = new SqlCommand(updateSql, myConnection);
myCommand.Parameters.AddWithValue("@HomeTown", HomeTown.Text.Trim());
myCommand.Parameters.AddWithValue("@HomepageUrl", HomepageUrl.Text.Trim());
myCommand.Parameters.AddWithValue("@Signature", Signature.Text.Trim());
myCommand.Parameters.AddWithValue("@UserId", newUserId);
myCommand.ExecuteNonQuery();
myConnection.Close();
}
}
}
Výše uvedený kód začíná určením, jestli jsme právě dosáhli kroku Dokončit. Vzhledem k tomu, že krok "Dokončeno" nastane okamžitě po kroku "Vaše nastavení", pak když návštěvník dosáhne kroku "Dokončeno", znamená to, že právě dokončil krok "Vaše nastavení".
V takovém případě musíme programově odkazovat na ovládací prvky TextBox v rámci UserSettings WizardStep
. Toho dosáhnete tak, že nejprve použijete metodu FindControl
k programovému odkazování na UserSettings WizardStep
objekt a pak znovu použijete odkazování na textová pole v rámci objektu WizardStep
. Po odkazování na textová pole jsme připraveni příkaz spustit UPDATE
. Příkaz UPDATE
má stejný počet parametrů jako INSERT
příkaz v CreatedUser
obslužné rutině události, ale zde používáme hodnoty domovského města, domovské stránky a podpisu zadané uživatelem.
Když je tato obslužná rutina události na místě, navštivte EnhancedCreateUserWizard.aspx
stránku prostřednictvím prohlížeče a vytvořte nový uživatelský účet, který určuje hodnoty pro domovské město, domovskou stránku a podpis. Po vytvoření nového účtu byste měli být přesměrováni na AdditionalUserInfo.aspx
stránku, kde se zobrazí informace o právě zadaném domovském městě, domovské stránce a podpisu.
Poznámka
Náš web má v současné době dvě stránky, ze kterých si návštěvník může vytvořit nový účet: CreatingUserAccounts.aspx
a EnhancedCreateUserWizard.aspx
. Mapa webu a přihlašovací stránka odkazují na CreatingUserAccounts.aspx
stránku, ale CreatingUserAccounts.aspx
stránka nevytádá uživatele k zadání jeho domovského města, domovské stránky a podpisových informací a nepřidá odpovídající řádek do UserProfiles
. Proto buď aktualizujte CreatingUserAccounts.aspx
stránku tak, aby tuto funkci nabízí, nebo aktualizujte stránku mapy webu a přihlašovací stránky tak, aby odkazovat EnhancedCreateUserWizard.aspx
místo CreatingUserAccounts.aspx
. Pokud zvolíte druhou možnost, nezapomeňte aktualizovat Membership
soubor složky Web.config
tak, aby přístup ke EnhancedCreateUserWizard.aspx
stránce povolil anonymním uživatelům.
Souhrn
V tomto kurzu jsme se podívali na techniky modelování dat, které souvisejí s uživatelskými účty v rámci rozhraní členství. Konkrétně jsme se podívali na modelování entit, které sdílejí relaci 1:N s uživatelskými účty, a také na data, která sdílejí relaci 1:1. Kromě toho jsme viděli, jak se tyto související informace dají zobrazit, vkládat a aktualizovat pomocí některých příkladů pomocí ovládacího prvku SqlDataSource a jiných pomocí ADO.NET kódu.
Tento kurz doplňuje náš přehled o uživatelských účtech. Od dalšího kurzu se zaměříme na role. V dalších několika kurzech se podíváme na architekturu Rolí, podíváme se, jak vytvářet nové role, jak přiřazovat role uživatelům, jak určit, ke kterým rolím patří uživatel, a jak použít autorizaci na základě rolí.
Šťastné programování!
Další čtení
Další informace o tématech probíraných v tomto kurzu najdete v následujících zdrojích informací:
- Přístup k datům a jejich aktualizace v ASP.NET 2.0
- ovládací prvek průvodce ASP.NET 2.0
- Vytvoření podrobného uživatelského rozhraní pomocí ovládacího prvku průvodce ASP.NET 2.0
- Vytváření vlastních parametrů ovládacího prvku Zdroj dat
- Přizpůsobení ovládacího prvku CreateUserWizard
- Rychlé zprovoznění ovládacích prvků DetailsView
- Zobrazení dat pomocí ovládacího prvku ListView
- Pitvání ověřovacích ovládacích prvků v ASP.NET 2.0
- Úpravy vkládání a odstraňování dat
- Ověření formuláře v ASP.NET
- Shromažďování informací o registraci vlastního uživatele
- Profily v ASP.NET 2.0
- Ovládací prvek asp:ListView
- Profily uživatelů – rychlý start
O autorovi
Scott Mitchell, autor několika knih o ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, školitel a spisovatel. Jeho nejnovější kniha je Sams Teach Yourself ASP.NET 2.0 in 24 Hours. Scotta můžete zastihnout na adrese mitchell@4guysfromrolla.com nebo prostřednictvím svého blogu na adrese http://ScottOnWriting.NET.
Zvláštní poděkování...
Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Chtěli byste si projít své nadcházející články na webu MSDN? Pokud ano, dejte mi řádek na mitchell@4GuysFromRolla.com.