Zobrazení uživatele ve FormView   otázka

ASP.NET WebForms

Zdravím,

v článku "Píšeme webovou aplikaci v ASP.NET krok za krokem (část 4)" se následovně řeší vypsání všech uživatelů v GridView:

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        GridView1.DataSource = Membership.GetAllUsers()
        GridView1.DataBind()
    End Sub

- potřeboval bych ovšem podobným způsobem vypsat konkrétního (přihlášeného uživatele) v komponentě FormView.

Zkoušel jsem následující

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
        'hodnota UserName přihlášeného uživatele
        Dim loggedName As String = Page.User.Identity.Name
        User.Text = loggedName.ToString()
        
        
        FormView1.DataSource = Membership.GetUser()
        FormView1.DataBind()
        
    End Sub

- pokud tuto stránku zobrazím a není přihlášený uživatel, tak se nic nezobrazí, ale pokud dojde k přihlášení uživatele dostanu chybovou hlášku "Typ zdroje dat není platný. Musí se jednat o rozhraní IListSource, IEnumerable nebo IDataSource."

Můžete poradit co s tím?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pokud není uživatel přihlášen,tak se nedá UserName zjistit a tak app vyhodí error.Zkuste dopsat podmínku anebo to nějak obejít.Možná by šlo použít i LoginView,ale to jsem osobně nikdy ve FormView nezkoušel.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

1. To, jestli je uživatel přihlášen, zjistíte z User.Identity.IsAuthenticated, pokud je True, tak někdo přihlášen je.

2. Nechápete, co dělá DataSource a DataBind. Ten kód, který jste zkopíroval z GridView, je ve formView nesmyslný. GridView slouží k zobrazování více záznamů najednou a Membership.GetUsers() vrací seznam objektů typu User s informacemi o uživatelích. To ve formView podle mě vůbec nepotřebujete, navíc FormView zobrazuje jen jeden záznam, takže mu nemůžete cpát seznam, protože pak se vcelku oprávněně vzteká.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

díky za upozornění,já jsem myslel, že když Membership.GetAllUser() předá kolekci všech uživatelů komponentě GridView a ta ji zobrazí, tak že Membership.GetUser předá pouze konkrétního uživatele a proto jsem chtěl použít FormView.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ajéje, to jsem tomu dal. Promiňte, přehlédl jsem, že do DataSource nastavujete GetUser a ne GetAllUsers. GetUser sice vrací aktuálně přihlášeného uživatele a FormView zobrazuje pouze jeden záznam, ale do vlastnosti DataSource musíte vždy podle této chybové hlášky přiřazovat kolekci, FormView si z ní vezme jen ten první prvek. Omlouvám se za mystifikaci v předchozím příspěvku. Dejte tedy

If Membership.GetUser() IsNot Nothing Then
    FormView1.DataSource = New User() { Membership.GetUser() }
Else 
    FormView1.DataSource = Nothing
End If

Musí se ty případy ošetřit zvlášť, protoože pokud není nikdo přihlášen, do DataSource by se dalo pole s jedním prvkem Nothing, což by FormView asi nerozchodil. Pokud ten Nothing přiřadíme přímo do DataSource, FormView to normálně vezme.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback