29. august 2002 - 14:13Der 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... ???
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...?
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 :-)
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 ;-)
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.
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 ;-))
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.
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 :-(
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
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.
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)
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.