2012-11-16 2 views
5

Voici mon contrôle personnalisé. Il hérite de la propriété [Hauteur] de la classe WebControl. Je veux y accéder dans le constructeur pour calculer d'autres propriétés. Mais sa valeur est toujours 0.Une idée?Accéder aux propriétés marquables de WebControls dans le constructeur asp

public class MyControl : WebControl, IScriptControl 
{ 

    public MyControl() 
    { 
     AnotherProperty = Calculate(Height); 
     ....... 
    } 

mon ASPX

 <hp:MyControl Height = "31px" .... /> 

Répondre

3

valeurs d'annotation ne sont pas disponibles dans le constructeur de votre contrôle, mais ils sont disponibles à partir de l'événement OnInit de votre contrôle.

protected override void OnInit(EventArgs e) 
{ 
    // has value even before the base OnInit() method in called 
    var height = base.Height; 

    base.OnInit(e); 
} 
+1

mais comment puis-je accéder à Height dans la méthode GetScriptDescriptors()? –

+0

voulez-vous dire que je dois enregistrer la hauteur dans une autre variable? this.U = base.Hauteur; –

+0

Je ne suis pas complètement en train de suivre ce que vous essayez de faire et je n'ai aucune connaissance de l'interface 'IScriptControl'. – andleer

1

Comme @andleer dit balisage n'a pas encore été lu dans le constructeur de contrôle, donc les valeurs de propriété qui sont spécifiées dans les balises ne sont pas disponibles dans le constructeur. Calculez une autre propriété à la demande lorsqu'elle est sur le point d'être utilisée et assurez-vous de ne pas l'utiliser avant OnInit:

private int fAnotherPropertyCalculated = false; 
private int fAnotherProperty; 
public int AnotherProperty 
{ 
    get 
    { 
    if (!fAnotherPropertyCalculated) 
    { 
     fAnotherProperty = Calculate(Height); 
     fAnotherPropertyCalculated = true; 
    } 
    return fAnotherProperty; 
    } 
} 
Questions connexes