parametr z Repeateru   otázka

ASP.NET WebForms

Podobný problém se tu řešil, mě to ale nefunguje.

Mám repeater v jehož ItemTemplate mám mimo jiné Label:

<asp:Label ID="LabelNumber" runat="server" Text='<%# Eval("number") %>'></asp:Label>

a tlačítko:

<asp:Button ID="ButtonUpdate" runat="server" Text="Update" onclick="ButtonUpdate_Click"/>

V kódu zachytávám událost:

protected void ButtonUpdate_Click(object sender, EventArgs e)
        {
            Button btn = (Button)sender;
            int id = Convert.ToInt32(((Label)btn.NamingContainer.FindControl("number")).Text);
            String redir = "~/Edit.aspx" + "?id=" + id;
            Response.Redirect(redir);
        }

Cílem je předat hodnotu number v parametru stránky na jinou stránku.

Pokaždé ovšem dostanu chybovou hlášku: Object reference not set to an instance of an object. , která ukazuje na řádek s NamingContainerem.

Kde by mohl být problém ?

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

Asi nebyla nalezena hledaná komponenta.Dejte si do aplikace breakpoint a odkrokujte si to.Nebo si udělejte v metodě kontrolu na obsah proměnné "id",jestli není prázdná,tedy null.

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

No je null, ale nechápu proč ... kde dělám chybu ?

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

Podívejte se,zda je vůbec v DOM komponenta s daným názvem a zda má nějakou hodnotu.Nejlépe použijte nějaký debugger v prohlížeči nebo vestavěný ve VS.s

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

Přiznám se, že teď nerozumím. Je na aspx stránce tak, jak jsem to tu dával, je v Labelu a existuje s tím názvem number. Po spuštění se mi taky v pořádku zobrazuje na stránce příslušná hodnota.

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

Tak si tam dejte breakpoint a podívejte se, co je null, jestli btn.NamingContainer nebo btn.NamingContainer.FindControl("number").

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

Takže tam mám jen btn.NamingContainer a hodnota je {System.Web.UI.WebControls.RepeaterItem}.

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

A FindControl vrací null? V tom případě tam ta komponenta není.

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

Tak teď už nerozumím ničemu ... jaktože tam ta komponenta není, když ji tam mám ? Kde potom může být chyba ?

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

A proč je tam FindControl("number"), když ten asp:Label má ID "LabelNumber"?

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji, to je přesně ono, já myslel, že se tam má dávat obsah Eval ...

nahlásit spamnahlásit spam -1 / 1 odpovědětodpovědět

Logicky je ID jedinečný identifikátor čehokoliv,ve vašem případě tedy komponenty.Je tedy jasné,že je nutné hledat přes ID a ne přes hodnotu vlastnosti Text,která je navíc proměnná.

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