27. august 2004 - 11:01Der er
13 kommentarer og 1 løsning
problemer med button i usercontrol
Jeg har en side der er opdelt i 3 celler. når man trykker på en knap/link skifter en af cellerne indhold. Cellen viser altså forskellige ascx. det virker fint og man kan skifte rundt mellem de forskellige ascx- Nu har jeg så lavet nogle aspbuttons i nogle ascx. Ligemeget hvad jeg skriver i asxcscriptet knapperne skal gøre sker der altid det at at cellen med ascx skifter tilbage til den ascx der vises når siden loades. Dette sker også selvom jeg bare indsætter en button uden at kode noget onclick til den.??? meget mystisk eller hvad.
I lang tid har samarbejdsbranchen fokuseret på at forbedre enhedsfunktioner – bedre kameraer, klarere lyd og smartere software. Men den virkelige forvandling handler ikke om funktioner.
her er scriptet til default.aspx som ses når man loader siden: <% @Page Language="C#" %> <link href="style.css" type="text/css" rel="stylesheet" /> <script language="C#" runat="server"> void Page_Init(Object Src, EventArgs E ) { Control main = Page.LoadControl("Main.ascx"); MainCell.Controls.Add(main); } void cat_1(Object Src, EventArgs E ) { Control main = Page.LoadControl("kategoriside.ascx"); MainCell.Controls.Clear(); MainCell.Controls.Add(main); } void forside(Object Src, EventArgs E ) { Control main = Page.LoadControl("Main.ascx"); MainCell.Controls.Clear(); MainCell.Controls.Add(main); } </script>
Html delen er ikke så vigtigt men den er opbygget af en tabel med 3 celler hvoraf den ene celle har id=MainCell som jeg referere til ovenover. metoderne ovenover kaldes fra <asp:LinkButton ID="cmd_frontpage" onclick="forside" Text="Forside" runat="server" /> <asp:LinkButton ID="cmd_cat_1" onclick="cat_1" Text="Møbler" runat="server" /> som er i htmldelen.
dette virker fint og når man trykker på knapperne skifter MainCellen indhold mellem nogle ascx. Der er ingen problemer med den ascx der loades i page_init. I den har jeg en knap der skriver noget i en label hvilket virker fint. Men i den anden ascx som ses når man trykker på knappen der loader den i MainCellen har jeg PRÆCIS identisk kode - altså en knap der skal skrive noget i en label. og dette virker ikke selvom det er magen til den anden
kode: <%@ Control Language="C#" %> <script language="C#" runat="server"> void test(Object Src, EventArgs E ) { Label1.Text = "weeee"; } </script>
og i html delen: <asp:button ID="Button1" onClick="test" Text="tralalala" runat=server/>
Jeg får ingen fejl men når man trykker på knappen skifter indholdet i MainCellen tilbage til den ascx der loades i page_init. Og hvis jeg sætter en knap ind uden funktionalitet gør den præcis det samme (loader den anden ascx i maincellen) selvom den ikke burde gøre noget.
hvis du først tilskrive kontrollen til siden i en eventhandler - vil du ikke kunne samle events op fra den, da den ved næste postback simpelthen ikke eksisterer (fordi du indsætter den fra et event i et postback-scenarie, bliver den ikke husket til næste).
// page_load - der indsættes en knap Button a = new Button(); a.Text = "A"; a.Click += new System.EventHandler(buttonA_Click); Form1.Controls.Add(a);
void buttonA_Click(object sender, EventArgs e) { // i handleren her indsættes en ny knap Button b = new Button(); b.Text = "B"; b.Click += new System.EventHandler(buttonB_Click); Form1.Controls.Add(b); }
void buttonB_Click(object sender, EventArgs e) { // du vil aldrig kunne komme herind, da knappen b kun vil eksistere efter // buttonA_Click eksekveres, hvilken den ikke vil gøre med mindre der trykkes på knap a. // og... det er svært at trykke på to knapper på samme tid :o) }
Jeg håber den var beskrivende - ellers må du lige sige til.
Jeg er ikke sikker på jeg forstår det rigtigt. Du indsætter først en knap på formen. Trykker man på den indsættes en ny knap. Men for at at eksekvere void buttonB_Click skal man trykke på begge knapper.
jeg har testet din kode. rigtigt nok indsættes en knap A når man starter. trykker jeg på den indsættes en knap B. jeg har sat void buttonB_Click til at skrive noget i en label. trykker jeg på B sker der ikke noget andet end B simpelthen forsvinder. Så din illustration illusterer præcis mit problem - men hvordan løser man det.
En usercontrol er sådan set en templated control i forvejen, og det vil ikke ændre på problematikken om du bruger den ene eller anden kontroltype.
det er ikke fordi det behøver at være så vanskeligt at fikse..
du kan f.eks. bruge en querystringparameter til at angive et "pagemode", og så indsætte din kontroller i forhold til det ved load, men der er mange måder at gøre det på.
hvordan går det her kamak ? jeg prøver lige at rydde lidt op i listen over gamle uafsluttede spørgsmål, så du får et svar hvis du har kunnet bruge det til noget, og du kan bare skrive hvis du har mere at spørge om omkring det. mvh :o)
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.