Avatar billede kapoou Nybegynder
02. februar 2010 - 16:38 Der er 15 kommentarer og
1 løsning

Overføre parameter til usercontrol

Jeg har et problem med at overføre variabler til en dynamisk loaded usercontrol. Min kode ser sådan her ud.

.aspx

Control thisControl = null;

thisControl = (Control)Page.LoadControl("frontcontrols/control_menu.ascx");

thisControl.ID = "mincontrol";

thisControl.source = "test";

.ascx
public string source
{
get
{
return thisPageId;
}
set
{
thisPageId = value;
}
}

Jeg får tilbage at source ikke er en parameter på thisControl.
Avatar billede keysersoze Guru
02. februar 2010 - 16:46 #1
Hvis du caster din usercontrol til en Control får du kun de properties Control-objektet indeholder - hvis du undlader at caste den til en Control men i stedet opretter en object af din usercontrol-type (måske Control_menu) får du din egen property. Se fx http://www.codeproject.com/KB/aspnet/LoadingUSerControl.aspx
Avatar billede kapoou Nybegynder
02. februar 2010 - 17:15 #2
Min ascx hedder

public partial class Controls_control_content : System.Web.UI.UserControl
{

}

Skal jeg så kalde den med

thisControl = (Controls_control_content)Page.LoadControl("frontcontrols/control_menu.ascx");

fra aspx siden?
Avatar billede Syska Mester
02. februar 2010 - 17:50 #3
Ja ... og din "thisControl" skal være af samme type som du Caster den til ... ellers kan du ikke se din Source property.

mvh
Avatar billede kapoou Nybegynder
02. februar 2010 - 18:00 #4
Mange tak for hjælpen. Jeg fandt ud af det.

keysersoze <-- Smider du et svar. Mange tak!
Avatar billede keysersoze Guru
02. februar 2010 - 19:31 #5
svar :)
Avatar billede kapoou Nybegynder
08. februar 2010 - 19:24 #6
Jeg har lige et tillægsspørgsmål som jeg håber at I kan hjælpe mig med. Mine controls bliver genereret ud fra en database. Er der nogen måder jeg dynamisk kan definere navnet på det som jeg caster controllen som. Nogen i retningen af...

Object objControl = reader["controlclassname"].ToString();

objControl thisControl = (objControl)Page.LoadControl("frontcontrols/control_menu.ascx");

?
Avatar billede Syska Mester
08. februar 2010 - 20:17 #7
ja, og nej ...

Nok nemmere du siger hvad du vil opnå med det ?

For du kommer på runtime alligevel ikke til at kende til properties eller andet på din Control.

mvh
Avatar billede Syska Mester
08. februar 2010 - 20:18 #8
modsat ... du kender på compile time alligevel ikke dine properties på din controls ... så hvad vil du opnå med det ?

mvh
Avatar billede kapoou Nybegynder
08. februar 2010 - 20:25 #9
Det er de samme properties der er på alle de controls der skal generes fra databasen. Jeg vil bare direkte i databasen kunne tilføje controls uden at skulle ind og rette i koden.
Avatar billede keysersoze Guru
08. februar 2010 - 20:51 #10
hvis alle controls er ens bortset fra typen bør du kunne have en slags parent-control de alle kan inherit fra - men ellers skal du over i en dynamisk sprog. Det lyder dog en smule underligt for mig at du kan have en masse controls der alligevel er ens.
Avatar billede kapoou Nybegynder
08. februar 2010 - 20:53 #11
De er ikke ens, men de parametre jeg vil have med over er de samme hver gang. Hvordan kan jeg lave en parent control?
Avatar billede Syska Mester
08. februar 2010 - 21:24 #12
Ligesom en Control ... der arver alle control fra, så vi kan håndtere en textbox, radiobutton, checkbox på samme måde ...

Hvis dine properties er de samme ... altså navnet ... men værdien som kommer fra database .. er andeledens ... så gør som keysersoze siger ...

mvh
Avatar billede kapoou Nybegynder
03. marts 2010 - 17:51 #13
Jeg fandt aldrig ud af det med parentcontrol så nu ligger de bare én for én. Jeg er dog løbet ind i et andet problem så er lidt tilbage til der hvor jeg allerede har været én gang. Super fedt.

Værdien i min parameter bliver ikke overført fra ASPX siden til ASCX'en. Min Kode ser ud sådan her.

ASPX
-------
Controls_ModuleControl myControl = (Controls_ModuleControl)LoadControl("/controls/modulecontrol.ascx");
myControl.ID = "control_" + reader["id"].ToString();
myControl.thisControlID = "0";
                   
myControl.moduleID = reader["moduleid"].ToString();

WebPart webPart = WebPartManager1.CreateWebPart(myControl);
webPart.Title = "webpart_" + reader["id"].ToString();
webPart.AllowZoneChange = true;
               
WebPartManager1.AddWebPart(webPart, WebPartZone1, 0);
-------

ASCX
-------
    String controlID = String.Empty;
    public string _moduleID = "0";
   
        public string thisControlID
    {
        get
        {
            return controlID;
        }
        set
        {
            controlID = value;
        }
    }

    public string moduleID
    {
        get
        {
            return _moduleID;
        }
        set
        {
            _moduleID = value;
        }
    }
--------

_moduleID bliver ved med at være 0 lige meget hvad jeg prøver at overføre.
Avatar billede Syska Mester
03. marts 2010 - 17:58 #14
Sæt et break point og debug igennem og se hvad der sker når de Setter bliver kaldt fra din aspx side ...

mvh
Avatar billede kapoou Nybegynder
03. marts 2010 - 18:02 #15
Jeg har lige lavet et simpelt eksempel hvor controlen bare bliver tilføjet til en placeholder, og der fungerer det fint. Når controlen så skal tilføjes en webpart i stedet for en plaveholder så bliver den ikke ført med.
Avatar billede Syska Mester
03. marts 2010 - 18:06 #16
Debug det ... ( Så kan du sætte et break point )

Det kan jo ik' være samme instance hvis ikke variablen som er sat kommer med ...

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