22. juni 2004 - 16:13Der er
15 kommentarer og 1 løsning
Problem med eventhandler
Jeg har en række LinkButtons som oprettes dynamisk, og hvor jeg gerne vil have kaldt den samme eventhandler uanset hvilken, der klikkes på. Linkbuttons tilføjes i denne løkke:
foreach(DirectoryInfo d in dirs) { htr = new HtmlTableRow(); htc = new HtmlTableCell(); lb = new LinkButton(); lb.Text = d.Name; lb.ID = d.FullName; lb.Click += new EventHandler(lb_Click); htc.Controls.Add(lb); htr.Controls.Add(htc); ht.Controls.Add(htr); }
og eventhandleren ser således ud (indtil videre): private void lb_Click(object sender, EventArgs e) { Response.Output.Write("lb_Click");
update(); }
lb_Click kaldes tilsyneladende ikke når man klikker på knapperne. Hvad gør jeg galt ?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Konstruktionen burde fungere når det køres fra OnInit - er du helt sikker på at handleren ikke kaldes ? Jeg mener - er det pr. debug at du udleder det, eller er det fordi du ikke får din Response.Output.Write (som du kan forkorte til Response.Write) ud på skærmen ?
Er knapperne synlige efter du har klikket på en af dem ?
/// <summary> /// Constructor /// </summary> public FileList() { }
/// <summary> /// Does basic initialization and makes sure update() is called during init. /// </summary> /// <param name="e">Event arguments</param> protected override void OnInit(EventArgs e) { base.OnInit(e);
rootDirectory = Attributes["RootDirectory"];
update(); }
/// <summary> /// Updates the control display /// </summary> protected void update() { if ( rootDirectory == null ) throw new Exception("FileList: Not properly initialized while loading page:" + this.Page.ToString());
if ( directory == null ) directory = rootDirectory;
HtmlTable ht = new HtmlTable(); HtmlTableRow htr = new HtmlTableRow(); HtmlTableCell htc = new HtmlTableCell(); htc.Controls.Add(new LiteralControl("Contents of: <b>" + directory + "</b>")); htr.Controls.Add(htc); ht.Controls.Add(htr);
DirectoryInfo di = new DirectoryInfo(directory); DirectoryInfo [] dirs = di.GetDirectories(); FileInfo [] files = di.GetFiles(); LinkButton lb; //eh = new CommandEventHandler(lb_Click); foreach(DirectoryInfo d in dirs) { htr = new HtmlTableRow(); htc = new HtmlTableCell(); lb = new LinkButton(); lb.Text = d.Name; lb.ID = d.FullName; // lb.Command += eh; lb.Click += new EventHandler(lb_Click); htc.Controls.Add(lb); htr.Controls.Add(htc); ht.Controls.Add(htr); }
Ah... Det tror jeg godt jeg kan. Du angiver ID's på knapperne til nogle path-værdier. Det medfører sikkert nogle ulovlige ID's med "\" og den slags i. Fjern denne linie (så autogenereres der lovlige ID's til dig): lb.ID = d.FullName; Og angiv d.FullName på lb.CommandArgument istedet, som du så samler op i handleren ved : directory = src.CommandArgument ;
Beklager ventetiden - jeg har ikke haft mulighed for at komme online.
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.