02. oktober 2004 - 16:42Der er
31 kommentarer og 1 løsning
postback fra et ubestemt antal knapper
Jeg vil have rediger knapper på min side, (man skal kunne redigere de forskellige kommentarer).
problemet er så at jeg ikke på forhånd ved hvor mange der skal være, så jeg kan ikke oprette dem i designview. og når jeg ikke opretter dem i designview, så synes jeg ikke at kunne få noget postback/callback fra knapperne. har prøvet en masse ting, men er på helt bar bund.
Virksomheder er på vej fra store sprogmodeller, der svarer på spørgsmål, til AI-agenter, der kan udføre opgaver på egen hånd. Det gør teknologien mere nyttig – og langt mere risikabel.
// hvis vi siger du har et Panel panel1 at sætte dem ind i :
Button btn = new Button(); btn.Text = "klik her"; Button btn = new Button(); // du tilføjer en handler her btn.Click += new EventHandler(btn_Click); // og smider knappen ind : panel1.Controls.Add(btn);
// her er så handleren private void btn_Click(object sender, EventArgs e) { // og her kan du så gøre et eller andet. }
hehe, jeg glemte vist at skrive hvad jeg lavede længere nede, jeg tilføjer dem på en HtmlGenericControl, men nej det der virker heller ikke, det virker kun hvis jeg har tilføjet dem på designview. Ellers bliver handleren ikke eksekveret under kørslen, ved tryk på knappen
de kommer i et array fordi at jeg putter det over i en anden klasse, da der skal laves en masse andet kode uden om dem, kommentarerne og selve posten skal jo også vises, det skal gerne være sådan at knapperne ligger ved den kommentar de nu er tilknyttet til, hvis du vil se mere kode vil jeg gerne poste det
det er primært fordi at events bliver ikke udført i starten, Page_Load bliver udført først, og hvis man så laver nye knapper, så forsvinder de gamle, men eventsene bliver kørt før prerender,
crap, det havde jeg faktisk prøvet, men så gjorde denne problemer int chosenArticleNumber = int.Parse(HttpContext.Current.Request.QueryString["article"]);
årsagen er for øvrigt som du selv siger, at events bliver kørt før prerender, og når du først hooker op på dem der kan du jo så ikke fange dem :o)
du skal huske på at hele "siden" skal bygges op på serveren i forbindelse med etpostback - og den bliver så bygget op som du nu engang har kodet den.... Det fungerer ikke på den måde, at fordi du hooker op på et event inden du smider siden ud til klienten - så "huskes" det ikke til næste postback.
altså... det "huskes" ikke til næste postback... ej heller bliver de kontroller du har tilføjet dynamisk husket. jeg skriver lige et lille eksempel på det her - øjeblik.
Ok... her er et eksempel på hvad der ikke virker, og (håber jeg da) illustrativt for det der er dit problem :
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls;
namespace EXP2 { public class ButtonSample : System.Web.UI.Page { protected HtmlForm Form1;
Du kan lige se om det ikke er det du slås med, og melde tilbage. (jeg vil også gerne vide hvorfor det er en HtmlGeneric du smidder kontrollerne ind på, og ikke en HtmlForm, et Panel, en Placeholder eller noget tilsvarende)
Grunden til at jeg puttede det på en HtmlGenericControl var at jeg byggede videre på noget andet, men det virker fint, hvis altså det havde virket i forvejen (hvis jeg havde puttet en knap på design og fanget dens event)
Jeg kan godt smide hele siden op som kode, men den er ret stor, derudover, benytter den en masse klasser for at lave vedligeholdelse nemt, så det løber nok nemt op i 8-9 hundrede linjer, og det gider du nok ikke at læse,
når man klikker på første knap sker der det, at siden bliver bygget op på serveren, så :
1) page_load : knap1 indsættes, og der hookes på på knap1-klikket 2) fordi der er hooket op på klikket eksekveres handleren, og knap2 tilføjes til kontroltræet, og der hookes op på eventet. 3) siden bliver smidt tilbage til klienten
når der så - ude hos klienten - klikkes på knap2 sker der følgende :
1) page_load : knap1 indsættes, og der hookes op på knap1-klikket. 2) Der er ikke klikket på knap1, og derfor eksekveres koden der indsætter knap2 ikke, så ingen handlere kaldes. (og handleren af knap2-klikeventet tilknyttes slet ikke) 3) siden smides tilbage til klienten - hvilket resulterer i at kun knap1 vises.
Hvis du har nogen ved hånden, men det er bare vigtigt at huske at putte elementer og handlere på før events bliver kørt, hvis jeg fik fat i hvad du mente.
jepper.... problemerne opstår normalt først for alvor, når man ønsker i en eventhandling, at sætte kontroller ind som man også ønsker at kunne abbonere på events på. (det er det som knap-eksemplet illustrere).
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.