18. juli 2008 - 10:04Der er
9 kommentarer og 1 løsning
Kald funktion fra usercontrol
Hej
Hvordan kan jeg kalde en funktion på parent page fra en usercontrol og samtidig overfører værdier med til funktionen, jeg har fundet følgende methode men jeg ved ikke hvordan jeg får værdier med i kaldet
kaldet fra usercontrol Page.GetType().InvokeMember("func1", System.Reflection.BindingFlags.InvokeMethod, null, this.Page, null);
Hvis du skal bruge din UserControl fra flere sider, kan du kalde metoderne igennem et interface. Denne løsning er mere type-safe, plus at den giver meget bedre performance, end hvis du bruger Reflection.
Hvis jeg skal give et eksempel på hvordan dette gøres, siger du bare til. :-)
Lyder som om din sidste metode med et interface er bedre, idet jeg gerne skulle kunne genbruge min usercontrol, så du må meget gerne give et eksempel ;-)
Det navn jeg hentyder til, er navnet på klassen. Du ser det i toppen af din code-behind filen. Hvis klassen hedder _Page1: public partial class _Page1 : System.Web.Ui.Page Du kan også se det i din aspx fil på "Inherits" attributten på den første linje.
Et eksempel på brug af interfaces: Først skal du skrive dit interface. Normal navngivning for interfaces, er at de starter med "I" og beskriver hvilken funktionalitet interfacet tilføjer. For eksempel klasser som kan klones implementerer interfacet ICloneable. I dette tilfælde kalder jeg interfacet for IDoSomething.
public interface IDoSomething { void func1(string sValue); }
Nu skal du sætte din Page til at implementere interfacet. Når en klasse implementerer interfacet IDoSomething, fortæller det omverdenen at klassen har en metode som hedder func1 (Du kan selvfølgelig tilføje så mange metoder og properties til interfacet, som du har lyst til). Når en klasse implementerer et interface, SKAL den have alle metoder og properties defineret i interfacet.
I din code-behind fil, tilføjer du IDoSomething til listen over typer der nedarves fra: public partial class _Page1 : System.Web.UI.Page, IDoSomething
Nu skal du sørge for at metoden func1 er implementeret i din page, hvis den ikke er det får du en compile-time fejl.
Når du skal kalde func1 fra din UserControl, skriver du følgende: ((IDoSomething)Page).func1(parameterValue);
det jeg tænkte over er at, den funktion som skal kaldes fra usercontrollen, skal opdatere en label på min parent side, men hvordan kender funktionen mine controller når den ligge i sit egen class?
Funktionen skal ligge i code-behind filen på din page. Den skal ikke ligge i en egen class. Et interface indeholder kun prototypen på en metode, ikke selve metoden. Selve metoden ligger i klassen som implementere interfacet. I dette tilfældet er klassen som implementerer interfacet din Page (Alting i .NET er defineret som klasser, også din page).
Når din page implementerer interfacet IDoSomething, betyder det bare at den SKAL have metoden func1. Din usercontrol kan se at din page implementerer interfacet, og ved derfor at den har func1 metoden, og kan kalde den.
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.