Avatar billede unknown_someone Juniormester
16. marts 2005 - 17:09 Der er 7 kommentarer og
1 løsning

problemer med userkontrol

Jeg spurgte for kort tid siden om nogle ting der resulterede i det svar at en del på vores site skulle laves om. Vi har en .aspx der inkluderer andre .aspx-sider ud fra nogle medsendte parametre og dette skal laves om til at fungere som userkontroller. Det er her jeg er stødt på lidt problemer.

I min default-side sætter jeg nogle parametre (fx sprog og billedekilde) - disse er blevet sat med sessions, men jeg ville tro at man med en usercontrol kan nøjes med at sætte det som en normal variabel fx;

Public SITE_LANG As String
SITE_LANG = "2"

Men forsøger jeg at kalde SITE_LANG fra codebehind-filen til min usercontrol får jeg bare at vide at SITE_LANG ikke er deklareret - hvordan skal det sættes op får at jeg kan bruge mine variabler fra default.aspx på mine usercontrols?

En anden ting er, at det ser ud som om jeg ikke kan kalde Server.HtmlEncode(noget) samt Server.UrlEncode(noget) i codebehind til usercontrollen - hvorfor nu ikke det?
Avatar billede a1a1 Novice
16. marts 2005 - 17:17 #1
protected SITE_LANG As <parent_page>
så burde du kunne læse/sætte parametre

det sidste spm. er nok bare at du ikke har nogen referencer (imports system.web.ui eller hvilken det nu er).

;o)
Avatar billede unknown_someone Juniormester
16. marts 2005 - 17:19 #2
<parent_page> - hvad skal stå der og på hvilken side skal det stå (i default eller i usercontrol?
Avatar billede a1a1 Novice
16. marts 2005 - 18:04 #3
<parent_page> skal vel egentlig være "parentpage.control", hvis du f.eks. har en "literal" på din default.aspx side skal du i din usercontrol skrive;
protected dims as literal

"senere" (i din uc) kan du så skrive f.eks. dims.Text = "test" og så vil teksten i din literalcontrol blive ændret/skrevet. Du kan også bruge dine egne klasser og andre usercontrols.

;o)
Avatar billede snepnet Nybegynder
16. marts 2005 - 22:43 #4
hej unknown :o)

lige et par kommentarer.... du slipper ikke for at lægge dine variable i session ved at flytte dem til en usercontrol (hvis det altså er variable du forventer skal huskes mellem roundtrips).
afhængig af din variabel kan vælge enten at lade den blive "husket hos klienten" - altså rendere den med ud til klienten, og læse den igen når den kommer tilbage... ViewState er beregnet til den slags.
Alternativt skal du - som du gør nu - gemme variablen på serveren hvor Session så er en oplagt muligt... Du har desuden Cache og Application til den slags også.

med hensyn til det med at tilgå en sides variable fra en usercontrol - så er det normalt ikke noget særlig oplagt design for en usercontrol.
hvis kontrollen har brug for at kende nogle variable når den eksekverer - vil det være mere oplagt at du har nogle properties på den, som så kan sættes af den respektive container (f.eks. en side).

hvis du vil tilgå en bestemt variabel på den side kontrollen lever på, vil du typisk gøre brug af noget som dette :

// en property på siden (vi sige at klassen hedder _Default:
Public ReadOnly Property SomeString() As String
Get
  Return "SomeString"
End Get
End Property

// i din kontrol
Private SomeStringFromPage As String = CType(Me.Page, _Default).SomeString

og du kan self. gøre noget tilsvarende hvis det er en eller ander kontrol på siden du er ude efter.
(jeg er ikke så skrap til vb.... håber det kan kompilere ;o)

men... på den måde har du låst din brugerkontrol fuldstændig fast til én enkelt side, hvorved en af de grundlæggende fiduser (genbrug) ved en usercontrol, er umulig.

du kan self. sikre mulighed for genbrug af kontrollen med baseklasser eller interfaces, men det bliver en mere frameworks-agtig struktur du så er ude i.

mvh
Avatar billede unknown_someone Juniormester
17. marts 2005 - 09:33 #5
før jeg begynder at eksperimentere alt for meget med dette skal jeg måske lige forklare min struktur hvis der evt er noget mere hensigtsmæssigt.

jeg har en default.aspx som altid vises. Den indeholder menu, top, bund, styles etc. Ud fra hvad der så står i adresselinien skal der inkluderes en underside i default.

står der fx www.domæne.dk/dims så skal siden dims.xxx inkluderes, står der /something skal siden something.xxx inkluderes osv. De sider som bliver inkluderet er alle unikke og skal ikke umiddelbart genbruges - de er en sammenblanding af rent html-indhold og andre er funktionelle sider med fx søgefelter osv.

både på default og alle undersider skal der inkluderes billeder alt efter hvilket domæne man er på. Står der www.domæne1.dk bliver der hentet variabler fra en database svarende til det domæne og de variabler bestemmer altså fra hvilken mappe der skal hentes billeder etc - går man ind på www.domæne2.dk bliver der hentet nogle andre værdier fra databasen og det kan så betyde at billederne skal hentes fra en anden mappe.

Derfor er der ikke noget genbrug eller - vil jeg gætte på - hokus pokus i dette og jeg er desværre nok lidt for præget af at jeg altid har arbejdet med asp.

Ud fra de oplysninger - er det så stadig overstående jeg skal ud i? Hvis kan jeg så lokke en til at give eksemplet på hvordan jeg får en af følgende overført til min kontrol (dims.ascx) fra default.aspx;

Public IMGSRC As String
IMGSRC = "domæne1"

eller

Session("IMGSRC") = "domæne1"
Avatar billede snepnet Nybegynder
17. marts 2005 - 13:17 #6
hej igen.

hvis du fra en side indsætter en kontrol :
Dims dims = (Dims)LoadControl("~/UserControls/Dims.ascs");

kan du bare sætte en property på kontrollen sådan her :

dims.SomeString = "ABC";

den property vil så være angivet på kontrollen som noget i denne stil :

private string _someString;

public string SomeSring
{
  get{return _someString;}
  set{_someString = value;}
}

hvis det er noget du alligevel lægger i session - kan du jo også bare hente det der inde fra kontrollen, hvis du synes det er nemmere i forhold til det du har nu.

altså... du kan jo lave en private property - der hopper direkte i session sådan her :

private string ImageSrc
{
  get{return this.Page.Session["IMGSRC"].ToString();}
}

du må lige sige til hvis du ikke er med på hvad jeg mener.
... du er også velkommen til at skrive hvad jeg kan fange dig på på messanger ell... så skal jeg nok fange dig, hvis der er noget du gerne vil have afklaret.

mvh
Avatar billede unknown_someone Juniormester
06. april 2005 - 09:35 #7
alt i alt ser det ud som om vi letteste bare er at fortsætte med vores session - hvis der kommer lidt svar kan jeg lukke
Avatar billede snepnet Nybegynder
06. april 2005 - 11:42 #8
du kan få et her :o)
mvh
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