22. august 2002 - 21:27Der er
11 kommentarer og 2 løsninger
Session virker ikke i .vb-fil men godtnok i ascx.vb-fil
Hvis jeg på en ascx.vb-side skriver Session("HuskMig") = "Mig" så virker det fint :-)
Hvis jeg skriver det samme i en .vb-fil (en class-fil), så meldes der "Name 'Session' is not declared" :-(
Eneste forskel jeg umiddelbart kan se er, at ascx-filen har "Inherits System.Web.UI.UserControl", men det giver ingen mening at bruge UserControl på .vb-siden. Dog sker der en forskel i fejlbeskeden hvis jeg alligvel indsætter denne "inherits..", nemlig en lang smøre " Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class."... Nogen forslag...???
Jeg tror det er fordi den anden fil er et standard vb-modul, som ikke kender noget til websider og dermed sessionvariabler. Din ascx.vb er en del af en "ægte" webside, så der er Session-variabler selvfølgelig kendte.
jeg sagde intet om at det ikke kan lade sig gøre. Hvis det kan lade så gøre at få fat i web.config indstillinger, kan man vel også med session. Det er bare kanp så enkelt.
jeg har faktisk forsøgt med begge dele - men de vil ikke ha' nogen .session("xx") efter sig, kun noget der hedder ".equals" som kan sammenligne med noget andet, det ligner en readonly-property... I ObjectBrowseren finder jeg nu 4 session-objecter, og de er allesammen readonly, kun een er overrideable: "System.Web.UI.Page.Session". Jeg må vel gøre noget andet, f.eks. tildele værdien til en PublicSharedVAriable og sætte Session i et aspx eller ascx-modul ?
Jeg plejer altid at benytte Session-værdier som parametre til de funktioner jeg kalder i mine moduler. F.eks. minVaerdi = mitModul.minFunktion( Session("enVærdi"), True )
Det er vel en ganske udemærket og fleksibel måde at gøre tingene på (synes jeg). På denne måde bliver dit modul vel også mere fleksibelt.
Nu er du vist ude i noget juks...? En sessionvariabel svarer lidt til en cookie, og er god at bruge hvis du vil tilgå en variabel fra alle moduler, altid (indtil brugerens browser lukkes).
Et funktionskald med en parameter overfører blot en pointer til parameteren, hvilket er langt mere "økonomisk" end at skrive/hente hele variabelen til/fra en sessionvariabel. Hvis parameteren er enkle værdier vil du muligvis ikke mærke så meget forskel, men hvis det f.eks. er et helt dataset, så mærkes det!
Det må være mest enkelt blot at skrive funktionen som ..=minFunktion("enVærdi"), eller =minFunktion(enVAriabelMedMinVærdi) istedet for at først at skrive værdien til en sessionVariabel...?
Helt enig! Det var jo det jeg skrev, at det ikke er så smart at bruge Sessions som parameter-overførsel til en funktion! Eller har jeg misforstået din måde at bruge sessions på i dit indlæg med "Jeg plejer altid at benytte..."?
Aner vist ikke hvad du har forstået :-) Altså, lad os sige at en bruger er logget ind med et brugerID. Et modul returnerer noget data baseret på ID'et. Istedet for at lave en funktion uden parametre, der returnerer data, kalder jeg funktionen med ID'et som parameter. ID'et har jeg haft gemt i en Session-variabel siden personen loggede på.
At jeg så kalder session-værdien før eller siden, kan vel være godt og vel flintrende ligegyldigt.
Okay, det er fint. Jeg tolkede din sætning "Jeg plejer altid at benytte Session-værdier som parametre til de funktioner jeg kalder i mine moduler." således at du generelt brugte sessionværdier til at overføre parametre til alle dine funktioner... Men jeg er vist ikke kommet videre med mit forsøg på at gemme en værdi i en session fra en vb.side, så nu finder jeg på noget andet.
Bedre sent end aldrig... jeg synes, at det er rart at kunne finde en løsning. Derfor en noget sen kommentar. Man kan nå en session variabel i et VB modul sådan her:
Filnavn: MitModul.vb:
Imports System.Web
Namespace EtNamespaceMedSammeNavnSomPaaDenSideHvorSubenKaldes Module MitModul ' Nulstiller en række udvalgte sessionvariable og ikke alle variable Public Sub NulstilSessions() HttpContext.Current.Session.Remove("Var1") HttpContext.Current.Session.Remove("Var2") End Sub
End Module
End Namespace
På en *.aspx.vb side kan sub'en kaldes i forbindelse med en OnClick event:
. . . Private Sub AnnullerKnap_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AnnullerKnap.Click ' Her indsætter vi noget test-indhold Session("Var1") = "Var1" Session("Var2") = "Var2" ' Her udskriver vi lige test-indholdet Response.Write(Session("Var1")) Response.Write(Session("Var2")) ' Kald sub'en som nulstiller sessionvariablerne NulstilSessions() ' Nu udskriver vi igen vaiablene, men nu er de tomme (faktisk bliver de genoprettet, men indeholder ikke noget) Response.Write(Session("Var1") & " tom") Response.Write(Session("Var2") & " tom") End Sub . . .
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.