21. marts 2005 - 04:24Der er
7 kommentarer og 1 løsning
Global adgang til metoder
Hej Alle
Lige lidt baggrund: Jeg har ganske få måneders (dårlig) undervisning i ASP.Net. Programmeringssproget er C#, hvilket jeg heller ikke er for stiv i - men kan falde tilbage på min Java erfaring.
Situationen: Jeg sidder nu i et udenlandsk firma og skal lave en hjemmeside som kan skifte mellem 3 sprog (Buttons, labels m.m.). Disse 3 sprog (Japansk, Kinesisk og Engelsk) ligger på XML filer og skal som første handling læses ind i Hash tabeller. Jeg har lavet et par metoder som, via rekursivt kald, løber tabellen igennem og henter den korrekte tekst til labels, buttons m.m. for hver side.
Spørgsmålet: Er det muligt at indlæse Hash tabel og metoder, sådan at jeg kun skal indlæse dem en gang og kan bruge dem hvergang jeg åbner en ny side. En slags global adgang/Singleton.
Jeg håber at der er en/eller flere som kan hjælpe. Jeg vil på forhånd undskylde hvis der forekommer en langsom reaktion enkelte gange, men Internet forbindelsen herude er ikke noget at råbe hurra for, samt der er en tidsforskel på 7 timer.
1. Kan jeg i den samme metode(Application_Begin) overføre data fra XML filer til Hash tabeller.
2. Jeg havde også disse to metoder, som jeg skal bruge til at overføre data fra Hash tabellerne til de relevante labels, buttons mm, kan de ligges tilsvarende, så jeg kun skal kalde metodenavnet. Eller skal metoderne skrives på hver side - ikke at det gør noget, udover at det fylder.
Ja, du kan gøre alle de ting i Begin_Request som du ville gøre andre steder. Det er bare en metode der bliver udført når at din applikation den starter.
Du kan smide dine metoder i en static klasse, så behøver du ikke en instans for at kalde dem:
public class DinKlasse { public static void DinMetode() { } }
Og så kalder du den på denne måde:
DinKlasse.DinMetode();
En anden mulighed er at lave en superklasse som nedarver fra System.Web.UI.Page som indeholder de to metoder, og derefter lader du alle dine aspx-sider arve fra denne superklasse. På den måde har du automatisk adgang til dem.
Du har lige reddet min dag - lige en sidste. Den der med superklasse har jeg prøvet, men fik ikke rigtig hul på den. Skrev noget i den her retning.
public class Webform1 : System.Web.UI.Page{ public void Metode1(){} public void Metode2(){} }
public class Webform2 : Webform1{ Do something }
Når jeg lavede den, så kunne jeg ikke lave label, buttons mm fordi Webform2 ikke kunne se System.Web.UI.Page - jeg tror at jeg mangler en erklæring(måske) til super klassen (base), men jeg kunne ikke rigtig se hvor den skulle være.
Du har allerede så rigeligt tjent dine point og min taknemlighed, men kunne du skitser en løsning på det sidste, så bliver nætterne lyser her i Kina
uhm.. du siger at du ikke kunne se label og buttons. Huskede du at ærklere fields med samme id som dune kontroller på aspx-siden?
public class Webform2 : Webform1 { protected Label label1 <dette variabelnavn skal være det samme som det id label'en har på aspx-siden> protected Button button1;
public override void OnLoad(EventArgs e) { label1.Text = "hej";
Ja, det er jo et godt spørgsmål - jeg prøvede så mange ting, at jeg var helt derude hvor jeg var klar til job annoncerne :-). Jeg kan se nogle ting i din version, som jeg ikke prøvede - og er sikker på at det er nok. Du ved - lige hul på bylden.
Takker for de mange og fine svar.
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.