Avatar billede sunezapa Nybegynder
29. august 2002 - 14:13 Der er 13 kommentarer og
2 løsninger

overfør værdi fra Client til Server via Request og ASP:Linkbutton

Jeg har en default.aspx som (bl.a.) loader en ascx-side, hvorpå der (bla.) er en ASP:Linkbutton.
Når der klikkes på ASP:Linkbutton så kører der et event på Serveren, og det virker.
MEN inden event-kørsel på serveren så kører Load_Page for default.aspx! I denne Load_Page skal jeg bruge en værdi fra den klikkede LinkButton - hvordan kan jeg aflevere/hente denne værdi?
har overvejet:
  sætte "?value=værdi" efter linket og REQUESTe værdien (kan man dette med en Linkbutton???)
  javascript onClick sætter en værdi i et Hidden-felt, som submittes og Requestes...
  ???
Avatar billede jakobandersen Nybegynder
29. august 2002 - 14:22 #1
Tilføj værdien manuelt til Viewstate i eventen.
Avatar billede sunezapa Nybegynder
29. august 2002 - 14:29 #2
Ikke forstået. har du en kodestump til illustration, eller nogen engelske ord, man kan slå op på i MSDN mv. for at finde exact dette?
Og - du er med på problemet med at Eventen først bliver udført EFTER at Load_Page er udført...?
Avatar billede jakobandersen Nybegynder
29. august 2002 - 14:43 #3
Okay.. Undskyld jeg havde ikke lige helt forstået din problemstilling. Så min løsning duer ikke :-(
Avatar billede odegaard Nybegynder
29. august 2002 - 15:59 #4
Du skal sætte en betingelse i Page_Load eventet (det hedder ikke Load_Page:), for at sikre at kode kun bliver ekserkveret når der ikke sker postback.

Dvs.
Sub Page_Load(Sender as Object, E as EventArgs)
  If Not Page.IsPostBack() Then
      [dit kode her]
  End If
End Sub
Avatar billede odegaard Nybegynder
29. august 2002 - 16:00 #5
ah jeg misforstod også. Nu er jeg med. Du kan se denne værdi et eller andet sted i "Sender" eller "E" (jf. ovenstående eksempel).
Jeg kan ikke lige huske hvor, men det står i SDK'en :-)
Avatar billede sunezapa Nybegynder
29. august 2002 - 16:17 #6
Jeg kan lave Request("__EVENTTARGET"), så finder jeg hvilken button der er klikket: _ctl0:menuList:_ctl17:LinkButton1
Men __EVENTARGUMENT er tom :-(
Jeg vil gerne ha' i det mindste Indexnummeret returneret,
men jeg KAN jo selvfølgelig "klippe" nummeret ud af "ctl0:menuList:_ctl17:LinkButton1" (og fratrække 1)...,
så får jeg jo også øvet noget Left,RIGHT,MID for ASP.NET  -  det er *garanteret* ikke det samme som i ASP, støn ;-)
Avatar billede jakobandersen Nybegynder
29. august 2002 - 16:36 #7
Brug RegEx til sidstnævnte istedet...
Avatar billede odegaard Nybegynder
29. august 2002 - 16:42 #8
Hvad med at lave en funktion som page_load kalder hvis det ikke er postback. Denne funktion kunne knappens eventhandler jo også kalde. Så er problemet løst på den nemme måde.
Avatar billede sunezapa Nybegynder
29. august 2002 - 16:53 #9
odegaard: Njah, det er jo det samme som før: at få eventhandleren til at kalde funktionen før page_load kan man jo ikke. Men ellers er det præcis hvad jeg ønskede - at kalde en funktion med en parameter, problemet er bare at parameteren først opdateres i eventhandleren.
Derfor virker "klik på knappen" hele tiden med 1-kliks forsinkelse.
Jeg kigger lige på den der RegEx - og på hvordan man henter "e" ind i koden (IKKE nemt at søge på eventargs - får lige 1 million milliard results ;-))
Avatar billede odegaard Nybegynder
29. august 2002 - 16:58 #10
Jamen du kalder den jo ikke fra Page_Load hvis du sørger for betingelsen "Page.IsPostBack()=False".
"Page.IsPostBack()" er "false" hvis der sker postback (dvs. klik på en knap).
Ideen er at du skal ændre dit programflow, så du har en ekstern funktion der kaldes fra én af de to funktioner. Sværere behøver løsningen jo ikke at være.
Avatar billede sunezapa Nybegynder
29. august 2002 - 17:10 #11
YES, det prøvede jeg også - men så kommer en forklaring (måske skulle jeg lavbe hele flowet om?):
Det er KUN på aspx-siden at jeg kan programmere usercontrols (ascx-sider.  Og det er kun i page-Load at jeg kan bruge LoadControl til at loade ascx-siden. Derfor kan jeg ikke bare flytte funktionaliteten :-( - f.eks. til siden med eventhandleren :-).
Hvis du kan hjælpe med at ændre flowet, så er der gerne dobbelt point etc. :-)
Har prøvet at lave LoadControl i en anden sub end (page-Load) på aspx-siden, der vil den ikke.
Måske er det noget med at den SKAL være Protected, eller KUN kører i "handles pages_load"-subs, eller...?
Her er lidt kodestump (Klik-værdien er her gemt i session-variabelen)
        strMenu = MenuTable.Rows(Session("menu"))("URL")
        Dim content As UserControl = LoadControl(strMenu & ".ascx")
        strSQL = strSQL & "<BR>MapPath: " & content.ToString & "."
        MyForm.FindControl("contentHolder").Controls.Add(content)
Det virker fint - hvis man klikker 2 gange hver gang :-(
Avatar billede sunezapa Nybegynder
29. august 2002 - 17:11 #12
...skulle være "Handles MyBase.Load" istf. "handles pages_load"...
Avatar billede sunezapa Nybegynder
29. august 2002 - 20:59 #13
Moonduck: Hvis du orker at smide endnu et svar, så gi'r jeg lidt for den der "Regex", - havde vel mødt den før eller siden, men nu blev det "sooner" :-)
Og også lidt til odegaard fordi hans snak ;-) gav mig ideen til "Request("__EVENTTARGET")".

Det er s'gu da ikke nemt, men hold k... hvor bli'r man dygtig - med alle de udfordringer...

Her er en Regex-funktion, som ovenikøbet tester for succes (
der MÅ da være en smartere måde at hente sådanne værdier på, nå men nu virker det jo, så: Videre!):

    Public Shared Function FindMenuID(ByVal str As String) As Int64
        If str = Nothing Or str = "" Then Return 0
        Dim r As New System.Text.RegularExpressions.Regex("(?<result>\d{1,2}):linkbuttonmenu", System.Text.RegularExpressions.RegexOptions.RightToLeft Or System.Text.RegularExpressions.RegexOptions.IgnoreCase)
        Dim m As System.Text.RegularExpressions.Match
        m = r.Match(str) '.Result("${result}")
        If m.Success Then
            Return m.Groups(1).Value
        Else
            Return 0
        End If
    End Function
Avatar billede odegaard Nybegynder
29. august 2002 - 22:42 #14
Lige lidt kværuleren...
Jeg har lidt den holdning, at kræver det så mange krumspring at lave en fungerene løsning, så er det fordi man ikke har gennemtænkt sit flow/opbygning ordentligt. Så betaler det sig tit at vende 180 grader, og så gøre det på en anden måde.
Personligt har jeg kun fået suverænt bedre løsninger ud af det.
Avatar billede sunezapa Nybegynder
16. september 2002 - 17:04 #15
Helt enig - jeg glæder mig til at ha' *mange* måder at vælge imellem at gøre det på, men øvelse gør jo mester, så...  (støn)
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