Avatar billede mrbonus Novice
02. oktober 2004 - 16:42 Der 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.

M.v.h. Richard
Avatar billede mrbonus Novice
02. oktober 2004 - 16:45 #1
En af mine bud var at gøre således

protected ArrayList editButtonArr;
public void showArticle()
{
editButtonArr = new ArrayList();
for (int i = 0; i < comments.Length; i++)
{
  Button editButton = new Button();
  editButton.Text = "Testing";
  editButton.Click += new EventHandler(editButton_Click);
  editButtonArr.Add(editButton);
}
}

private void editButton_Click(object sender, EventArgs e)
{
Response.Redirect("http://www.google.dk");
}

Dette blev kørt i prerender, men editButton_Click bliver ikke eksekveret ved tryk på knapperne.
Avatar billede snepnet Nybegynder
02. oktober 2004 - 16:48 #2
du kan indsætte en knap sådan her :

// 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.
}

var det ok ?

mvh
Avatar billede snepnet Nybegynder
02. oktober 2004 - 16:50 #3
hov... havde ikke set at du havde smidt noget ind selv :o(

hvordan sætter du de knapper ind på siden, altså som du smider ind i dit array (og hvorfor smider du dem i det der array ?)

mvh
Avatar billede mrbonus Novice
02. oktober 2004 - 16:50 #4
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
Avatar billede snepnet Nybegynder
02. oktober 2004 - 16:52 #5
jeg kan se at det sker i en motode du kalder showArticle... hvornår kaldes den ?
Avatar billede mrbonus Novice
02. oktober 2004 - 16:52 #6
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
Avatar billede mrbonus Novice
02. oktober 2004 - 16:53 #7
den kaldes i prerender
Avatar billede snepnet Nybegynder
02. oktober 2004 - 16:53 #8
ok - det skrev du også... skulle bare være sikker.
hvad er årsagen til at du har kaldt prerender ?
Avatar billede mrbonus Novice
02. oktober 2004 - 16:55 #9
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,
Avatar billede snepnet Nybegynder
02. oktober 2004 - 16:56 #10
men bortset fra det er det for sent... altså at abbonere på events i prerender. du bliver nok nødt til at køre den kode tidligere.
Avatar billede mrbonus Novice
02. oktober 2004 - 16:57 #11
crap, det havde jeg faktisk prøvet, men så gjorde denne problemer
int chosenArticleNumber = int.Parse(HttpContext.Current.Request.QueryString["article"]);
Avatar billede mrbonus Novice
02. oktober 2004 - 16:58 #12
den var ikke blevet laved til en instans
Avatar billede snepnet Nybegynder
02. oktober 2004 - 16:59 #13
jeg tror gerne jeg vil se lidt mere kode... det er en general problematik du sidder med, og jeg tror der er et par småting du lige skal "tænke" om.
Avatar billede snepnet Nybegynder
02. oktober 2004 - 17:03 #14
å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.
Avatar billede mrbonus Novice
02. oktober 2004 - 17:04 #15
hmmmm, hvordan løser man den problematik
Avatar billede snepnet Nybegynder
02. oktober 2004 - 17:04 #16
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.
Avatar billede mrbonus Novice
02. oktober 2004 - 17:05 #17
Cool, det er lige præcis det der er mit problem
Avatar billede snepnet Nybegynder
02. oktober 2004 - 17:07 #18
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;

        private void Page_Load(object sender, System.EventArgs e)
        {
            Button btn = new Button();
            btn.Text = "Button1";
            btn.Click += new EventHandler(btn_Click1);
            Form1.Controls.Add(btn);
        }

        private void btn_Click1(object sender, EventArgs e)
        {
            Response.Write("Der er klikket på knap1");
            Button btn = new Button();
            btn.Text = "Button2";
            btn.Click += new EventHandler(btn_Click2);
            Form1.Controls.Add(btn);
        }

        private void btn_Click2(object sender, EventArgs e)
        {
            Response.Write("Der er klikket på knap2");
        }

        override protected void OnInit(EventArgs e)
        {
            InitializeComponent();
            base.OnInit(e);
        }
       
        private void InitializeComponent()
        {   
            this.Load += new System.EventHandler(this.Page_Load);
        }
    }
}
Avatar billede snepnet Nybegynder
02. oktober 2004 - 17:09 #19
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)

mvh
Avatar billede mrbonus Novice
02. oktober 2004 - 17:15 #20
Det ligner mit problem, at de 2 knappers handlers ikke bliver afviklet
Avatar billede mrbonus Novice
02. oktober 2004 - 17:16 #21
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)
Avatar billede mrbonus Novice
02. oktober 2004 - 17:21 #22
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,
Avatar billede snepnet Nybegynder
02. oktober 2004 - 17:22 #23
Prøve at se det her :

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.

kan du følge det ?

mvh
Avatar billede mrbonus Novice
02. oktober 2004 - 17:23 #24
ja
Avatar billede mrbonus Novice
02. oktober 2004 - 17:28 #25
Men det er sjovt, for du adder dem godt nok på en form, hvor det så virker.

Men mit virker ikke ved mig, jeg putter det så heller ikke direkte på en form, men på en HtmlGenericControl, som ligger inden i formen
Avatar billede mrbonus Novice
02. oktober 2004 - 17:42 #26
DOH det virkede, havde fået fjernet mit debugpunkt, så havde regnet med at den standsede, men det gjorde den ikke.

Så problemet lå i at den glemte komponenterne og derved var det for sent at sætte events på i prerender
Avatar billede mrbonus Novice
02. oktober 2004 - 17:42 #27
Cool, hvis du lige laver et svar, så får du pointene
Avatar billede snepnet Nybegynder
02. oktober 2004 - 17:43 #28
ok - hvis du er tilfreds... jeg vil meget gerne vise dig nogle eksempler på hvordan tingene kan bygges op så man kan opnå den slags funktionaltet.
mvh
Avatar billede mrbonus Novice
02. oktober 2004 - 17:46 #29
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.
Avatar billede snepnet Nybegynder
03. oktober 2004 - 18:28 #30
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).
Avatar billede mrbonus Novice
04. oktober 2004 - 15:13 #31
jep, så gav det bare et andet problem, for jeg skulle bruge en værdi som blev indlæst i events, men jeg har omgået det, lidt omsonst, men det virker.
Avatar billede snepnet Nybegynder
04. oktober 2004 - 15:18 #32
ok - det er jo det vigtigste :o)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester