Chyba s FindControl   zodpovězená otázka

ASP.NET WebForms, Architektura, Bezpečnost

Zdravíčko. Potřebuju poradit:

Mám aplikaci, která využívá ListView. V ItemTemplate mám Label a LinkButton, které se mají zobrazit jenom pokud je člověk přihlášen jako admin. Takže je to

if (User.Identity.IsAuthenticated && User.IsInRole("Admin"))
            {
                Label lbl = this.ListView1.FindControl("mailLabel") as Label;
                LinkButton lnk = this.ListView1.FindControl("DeleteButton") as LinkButton;
                lbl.Visible = true;
                lnk.Visible = true;
            }
            else
            {
            }

Což mi dává tuto chybovou hlášku: Object reference not set to an instance of an object a NullReferenceException. Potřebuju poradit co s tím. Předem díky.

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

Problém máte v tom, že ListView se využívá pro zobrazení více položek a v každé z nich je zobrazená kopie ItemTemplate (tedy máte každý Label a LinkButton pro jednu každou položku), proto musíte hledat Label a LinkButton v ListViewItem. Nezbývá vám tedy nic jiného, než projet všechny položky v ListView a v nich teprve provést příslušnou akci. Také doporučuji, abyste vlastnosti nastavoval přímo výsledku funkce FindControl:

if (User.Identity.IsAuthenticated && User.IsInRole("Admin"))
    foreach (ListViewItem it in ListView1.Items) {
        (Label)it.FindControl("mailLabel").Visible = true;
        (LinkButton)it.FindControl("DeleteButton").Visible = true;
    }
}

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

Vyzkouším, ale na asp.net mi poradili

ListView1.Items[index_itemu].FindControl();

Co tedy doporučujete spíše?

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

Jo, vaše řešení je správné, až na to, že to nemá být

(Label)it.FindControl("mailLabel").Visible = true;

ale jenom

it.FindControl("mailLabel").Visible = true;

Protože v prvním případě by se typ bool převáděl na typ Label ;-) Děkuji, moc jste mi pomohl.

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