Databinding v IF   zodpovězená otázka

ASP.NET WebForms

Dobrý den,

v komponentě repeater s datasourcem XML bych chtěl použít podmínku při generování jednotlivých položek.

<ItemTemplate>
  <% if (XPath("@id") != Request.QueryString["menu"])
  { %>
      <p><%# XPath("@jmeno") %></p>
   <% }
</ItemTemplate>         

Problém je visual studio vyhodí vyjímku:

"Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control."

Nevíte někdo jak použít to XPath("@id") nebo jak to jinak udělat abych mohl generovat položky repeateru na základě jejich hodnot

Děkuji Tom

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

Nejde, podobné špagety kódy v ASP.NET nejsou povolené.

Na bloky <% %> rovnou zapomeňte a nepoužívejte je ani na místech, kde fungují. Jediné, co doporučuji používat, je <%# %> a <%$ %>.

Pokud potřebujete vyfiltrovat jen některé položky, pak bych to buď nedělal přes XmlDataSource (XML bych si načetl v code behindu a vyfiltroval tam, komponentě bych pak jen předhodil kolekci objektů).

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

Dik, za odpověd. Líbí se me výraz špagety kód :)

Ja jsem tím chtěl vyrobit něco podobného co dělá komponenta <asp:DataPager> s tím že bych měl seznam odkazů na stejnou stránku a aktivní odkaz by byl jen html text a jinak by to byli <a href=.......> odkazy. Pri generovani by se to pravě rozhodovalo v tom IFu. Ale jak říkáte nejde to použít. Pak mě napadá generovat html v kódu. Ale nevím zda jeto správná cesta? Jsem v html začatečník. Vlastně vše co o to vím mám z Vašich stránek a videotutoriálů. Dík

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

Špagety kód se tomu opravdu tak říká.

Na to, co potřebujete, použijte komponentu asp:HyperLink a bindingem jí nastavte NavigateUrl - pokud bude prázdná, tak to vyrenderuje jen text, pokud tam něco bude, tak to udělá odkaz.

Generování HTML v kódu je taky možné, ale bral bych to jako poslední možnost.

Jinak z bindingu můžete volat funkce v code behindu, čehož bych využil, něco jako třeba:

<asp:HyperLink runat="server" NavigateUrl='<%# GetUrl((string)Eval("Name")) %>' />

A funkce:

public string GetUrl(string name) 
{
    if (name == Request.QueryString["name"])
        return "";   // žádný odkaz
    return name;
}
nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dik za vysvetleni

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