Avatar billede wolker Nybegynder
27. april 2004 - 23:42 Der er 6 kommentarer og
2 løsninger

Hvilken knap der er trykket på

Hej

Hvis jeg nu har en form med flere knapper og links, hvordan kan jeg så i page_load aflæse hvilken knap/hyperlink der er trykket på.
Jeg ved godt at jeg kan lave en onclick_event som udføres når knappen aktiveres, men hvis jeg nu gerne vil undgå at noget kode bliver udført i page_load når en bestemt knap aktiveres.

Hvordan gør jeg det ?
Avatar billede guidmaster Nybegynder
27. april 2004 - 23:44 #1
Her er en stump kode du måske kan brueg

' Return a reference to the control that caused the last postback,
'  even from the Page_Load event!
' It requires in input a reference to the posted-back page
' (this is necessary if you want to be able to move this function in a separate
' class instead of in a page's codebehind class

Function GetPostbackControl(ByVal targPage As Page) As Control
    If targPage.IsPostBack Then
        ' try to find the name of the postback control in the hidden
        ' __EVENTTARGET field
        Dim ctlName As String = targPage.Request.Form("__EVENTTARGET")
        ' if the string is not null, return the control with that name
        If ctlName.Trim().Length > 0 Then
            Return targPage.FindControl(ctlName)
        End If
        ' the trick above does not work if the postback is caused by standard
        ' buttons.
        ' In that case we retrieve the control the ASP-way: by looking in the
        ' Page's Form collection
        ' to find the name of a button control, that actually is the control
        ' that submitted the page
        Dim keyName As String
        For Each keyName In targPage.Request.Form
            Dim ctl As Control = targPage.FindControl(keyName)
            ' if a control named as this key exists,
            '  check whether it is a button - if it is, return it!
            If Not ctl Is Nothing Then
                If TypeOf ctl Is Button Then
                    Return ctl
                End If
            End If
        Next
    End If
    Return Nothing
End Function
Avatar billede nielsbrinch Nybegynder
28. april 2004 - 18:21 #2
På din onclick-event kan du sætte en session-variabel som angiver hvilken knap du trykkede på. ala:

Session["action"] = "MitHyperLink";

og så i din page_load:

if (Session["action"].Equals("MitHyperLink"))
{
  Response.Write("Du trykkede på mit hyperlink");
}
Avatar billede nielsbrinch Nybegynder
28. april 2004 - 18:22 #3
Hvis du helt vil undgå onclick-events kan du putte noget i querystring og aflæse fra den i stedet.
Avatar billede wolker Nybegynder
29. april 2004 - 01:23 #4
Tak for svar.

Den med session-variabel og querystring, har jeg prøvet/bruger jeg, men den metode, har jo ikke ret meget med .net agtig programmering at gøre, så derfor var jeg ret sikker på at der måtte være en rimelig nem måde at aflæse hvilken knap der var trykket på.

page_load har jo flg. parameter
'sender As System.Object, ByVal e As System.EventArgs'
så der burde da være en metode ala.
dim knap_trykket = sender.GetSender.name eller
dim knap_trykket = e.Get_Den_Der_Udløste_Event.name
eller noget i den stil.

guidmaster>>
Din rutine har jeg ikke prøvet, men det ser jo heller ikke særlig simpel ud, så kan man ligeså godt bruge en session-variabel.
Avatar billede casper_skovgaard Nybegynder
05. maj 2004 - 09:24 #5
Hej wolker

har du fundet en løsning jeg står nemlig med samme problem :)
Avatar billede guidmaster Nybegynder
05. maj 2004 - 09:44 #6
wolker>>
Hvor simpelt skal det være? Du har den metode i din Base Page og skal lave et kald til metoden hvis du vil bruge den? Resten er cut and past.....hvad er det du vil have?
Avatar billede casper_skovgaard Nybegynder
05. maj 2004 - 15:44 #7
Jeg har fundet følgende eksempel, som du måske kan bruge nogle ideer fra:

<%@ Page Language="C#" %>

<html>
<script runat=server>
protected void OnRed(object src, EventArgs e)
{
  _color.Style["background-color"] = "Red";
}

protected void OnGreen(object src, EventArgs e)
{
  _color.Style["background-color"] = "Green";
}

protected void OnBlue(object src, EventArgs e)
{
  _color.Style["background-color"] = "Blue";
}

protected void Page_Init(object src, EventArgs e)
{
  _redButton.ServerClick  += new EventHandler(OnRed);
  _greenButton.ServerClick += new EventHandler(OnGreen);
  _blueButton.ServerClick  += new EventHandler(OnBlue);
}

protected void Page_Load(object src, EventArgs e)
{
  if (!IsPostBack)
  {
    _color.Style["background-color"] = "Red";
    _color.Style["width"] = "100";
    _color.Style["height"] = "100";
  }
}

</script>
<body>
  <form runat=server>

    <h2>ASP.NET color page</h2>
    <div id=_color runat=server />
    <p>
    <input type=button id=_redButton value="Red" runat=server />
    <input type=button id=_greenButton value="Green" runat=server />
    <input type=button id=_blueButton value="Blue" runat=server />
    </p>
  </form>
</body>
</html>
Avatar billede nielsbrinch Nybegynder
05. maj 2004 - 17:44 #8
.NET er så flink at hjælpe med en onclick-event. Ligesom quidmaster kan jeg heller ikke se hvordan det overhovedet kan være simplere.
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