Avatar billede bertelsenbo Nybegynder
27. februar 2008 - 11:25 Der er 6 kommentarer og
1 løsning

Undgå OnClientClick triggers ved page load

Hej eksperter,

Jeg har opfundet følgende problem:
En linkbutton med OnClientClick til en metode i codebehind filen skal skujle/vise 2 rækker i en tabel. Men eventen bliver allerede affyret når siden loader så rækker starter med at være skjult.

Spørgsmål:
1. Hvordan undgår man at den bliver affyret ved load af siden?
2. Hvorfor skal en OnClientClick returnere en String?

Husk at løsningen skal være gennem codebehind-filen eftersom de diverse linkbuttons bliver oprettet dynamisk.


APSX:
<asp:Table ID="Table1" runat="server">
<asp:TableHeaderRow><asp:TableHeaderCell>
<asp:Panel ID="Panel1" runat="server"></asp:Panel>
</asp:TableHeaderCell></asp:TableHeaderRow>
<asp:TableRow><asp:TableCell>Indhold 1</asp:TableCell></asp:TableRow>
<asp:TableRow><asp:TableCell>Indhold 1</asp:TableCell></asp:TableRow>
</asp:Table>


Codebehind:
protected void Page_Load(object sender, EventArgs e)
{
    LinkButton lb = new LinkButton();
    lb.Text = "overskrift";
    lb.OnClientClick = hideRows();
    Panel1.Controls.Add(lb);
}

public String hideRows()
{
    if (Table1.Rows[1].Visible == true)
    {
        Table1.Rows[1].Visible = false;
        Table1.Rows[2].Visible = false;
    }
    else
    {
        Table1.Rows[1].Visible = true;
        Table1.Rows[2].Visible = true;
    }
    return "sucess";
}
Avatar billede powerpunk Nybegynder
27. februar 2008 - 13:05 #1
OnClientClick er en property der indeholder et client-side script der eksekveres ved klik på knappen, og ikke en event...

Det du prøver at gøre er nok snarere

Codebehind:
protected void Page_Load(object sender, EventArgs e)
{
    LinkButton lb = new LinkButton();
    lb.Text = "overskrift";
    lb.Click += new EventHandler(hideRows);
    Panel1.Controls.Add(lb);
}

public void hideRows(object sender, EventArgs e)
{
    if (Table1.Rows[1].Visible == true)
    {
        Table1.Rows[1].Visible = false;
        Table1.Rows[2].Visible = false;
    }
    else
    {
        Table1.Rows[1].Visible = true;
        Table1.Rows[2].Visible = true;
    }
}
Avatar billede powerpunk Nybegynder
27. februar 2008 - 13:08 #2
Eventhandleren kan også kobles på i forms designeren. Det er lidt pænere fordi den så ryger om i den autogenerede initialiserings-kode, som kun bliver kaldt i constructoren til formen.

Når du kobler den på i Page_Load skal der i hvert fald checkes på at det ikke sker når siden loades som postback, da du ellers vil få tilføjet en ny delegate til din event hver gang siden loader..
Avatar billede bertelsenbo Nybegynder
27. februar 2008 - 15:59 #3
Jeg vender først tilbage til den specifikke kode i morgen. Så da tester jeg det lige af. Men det er da klart at der ikke er tale om et 'client-side script', jeg skal da lige åbne øjnene inden jeg koder løs :-] Indtil videre tak for hjælpen.

Point følger i morgen :]
Avatar billede bertelsenbo Nybegynder
28. februar 2008 - 09:11 #4
Lige hvad jeg behøvede! Svar for point.
Avatar billede bertelsenbo Nybegynder
28. februar 2008 - 09:15 #5
Hvis du ved det, må du eventuelt også gerne skrive hvordan du videregiver parametre til eventen. fx 2 int's startRow og endRow :-)
Avatar billede powerpunk Nybegynder
28. februar 2008 - 10:22 #6
Du kan nok desværre ikke pille ved eventens signatur. 'Click'-Eventen er defineret som typen 'EventHandler' hvilket vil sige at den forventer en delegate der returnerer void og tager to argumenter af typerne hhv 'object' og 'EventArgs'.

Så dine startRow og endRow parametre er du nok nødt til at trække ud et andet sted fra. Det kunne være nogle fields i din klasse eller nogle andre (usynlige) felter på siden.

Iøvrigt kunne

    if (Table1.Rows[1].Visible == true)
    {
        Table1.Rows[1].Visible = false;
        Table1.Rows[2].Visible = false;
    }
    else
    {
        Table1.Rows[1].Visible = true;
        Table1.Rows[2].Visible = true;
    }

vel koges ned til

  Table1.Rows[1].Visible = !Table1.Rows[1].Visible
  Table1.Rows[2].Visible = !Table1.Rows[2].Visible
Avatar billede bertelsenbo Nybegynder
28. februar 2008 - 18:33 #7
Bukker og takker!
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