Avatar billede kxh Nybegynder
18. juli 2008 - 10:04 Der 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);

funktionen på parent page
publiv void func1(string sValue)
{
....
}

// Kim
Avatar billede aaberg Nybegynder
18. juli 2008 - 10:16 #1
Du behøver ikke at bruge Reflection, det gør det bare ekstra kompliceret. Du skal bare caste din page til den type den er. Hvis din page hedder Page1:

((Page1)Page).func1(parameterValue);
Avatar billede aaberg Nybegynder
18. juli 2008 - 10:19 #2
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. :-)
Avatar billede kxh Nybegynder
18. juli 2008 - 10:23 #3
Hej aaberg

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 ;-)

// Kim
Avatar billede kxh Nybegynder
18. juli 2008 - 10:29 #4
Hej igen

Lige et dumt spørgsmål - men hvor ser jeg hvad siden hedder - som i dit tilfælde page1
Avatar billede aaberg Nybegynder
18. juli 2008 - 10:58 #5
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);
Avatar billede aaberg Nybegynder
18. juli 2008 - 11:00 #6
Lige en ekstra tilføjelse; Læg interfacet i en egen .cs fil i App_Code folderen. Så er det tilgængeligt fra alle dine Pages.
Avatar billede kxh Nybegynder
18. juli 2008 - 11:10 #7
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?
Avatar billede aaberg Nybegynder
18. juli 2008 - 11:22 #8
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.
Avatar billede kxh Nybegynder
18. juli 2008 - 11:29 #9
Hej

Det virker jo perfekt, en super løsning, jeg er lært noget nyt idag kanon.
Lig et svar og du skal få din points.

// Kim
Avatar billede aaberg Nybegynder
18. juli 2008 - 11:56 #10
svar :-)
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
Kurser inden for grundlæggende programmering

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