08. marts 2004 - 09:03Der er
14 kommentarer og 1 løsning
Hjælp til menu i user control
Jeg har lavet en menu i en user control. Denne menu består af af nogle links, disse links vil jeg gerne have til at skifte farve når man køre musen over dem. Jeg har prøvet at bruge css (hover) i den sider der implementere user controllen, men det virker ikke. Hvordan kan jeg så lave det?
Et andet spørgsmål til min menu er om den kan laves lidt pænere, jeg har følgende kode:
hehe... ja, det kan godt gøres noget pænere ved hjælp af WebControls... du kan enten bruger HyperLink som svarer til et <a>-tag og Label som svarer til <span>.
Begge disse typer arver fra en base-control som implementerer forskellige attributer, heriblandt en CssClass og en Style hvor du kan tilføje forskellige styles.
For at udnytte det i din repeater skal du ændre din signatur på din metode så den returnerer et object af typen System.Web.UI.WebControls.WebControl, og dine to strenge skal ændres til
1)
Label l = new Label(); l.CssClass = "menu_Alm"; l.Style.Add("color", "red"); l.Text = menunavn.ToString(); return l;
Hard et noget at gøre med det tag jeg bruger til at præsentere data i repeateren: <%# valgtPunkt(DataBinder.Eval(Container.DataItem, "modulNr"), DataBinder.Eval(Container.DataItem, "filnavn"), DataBinder.Eval(Container.DataItem, "menunavn"))%>
Label l = new Label(); l.CssClass = "menu_Alm"; l.Style.Add("color", "red"); l.Text = menunavn.ToString();
StringWriter sw = new StringWriter(); HtmlTextWriter htmlTextWriter = new HtmlTextWriter(sw); l.Render(htmlTextWriter ); return sw.ToString();
og,ja... mon ikke du kan gætte 2'eren selv? :)
det er dog noget af en hovsaløsning. Istedet kan man sætte en placeholder i din template og override ItemDataBound der laver et af de to objecter og sætter det ind i placeholderen.
tja... det kan der være noget om... eneste ulempe ved din metode er at du ikke udnytter de indbyggede klasser til formålet i .Net. Det er bare lidt noget bæh at bruge ItemTemplate i DataReaderen til at udskrive menuen på, brug istedet ItemDataBound-eventen, hvor du kan få lov at lave noget conditional casting af dit object så det passer til den type der kommer fra valgtPunkt-metoden.
Nu virker det, det er som om at den ikke rebuilder all når jeg beder om det! Nogle gange hvis jeg laver retur typen om på en metode slår det ikke igennem før jeg har makket rudt med det. Hvad kan det skyldes?
Nå men nu hvor det virker, så smid et svar så du kan få nogle velfotjente point!
Iøvrigt hvis du får tid til det kan du så give et eksempel på den "mere rigtige" løsnig du referer til ? (Istedet kan man sætte en placeholder i din template og override ItemDataBound der laver et af de to objecter og sætter det ind i placeholderen.)
Control c = valgtPunkt(modelNr, filNavn, menuNavn); menuItem.Controls.Add(c); } }
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.