2012-11-16 7 views
5

Hier ist mein benutzerdefiniertes Steuerelement.Er erbt [Height] -Eigenschaft von WebControl-Klasse.Ich möchte im Konstruktor für die Berechnung anderer Eigenschaften zugreifen.Aber sein Wert ist immer 0.Any Idee?Zugriff auf WebControls markierbare Eigenschaften im Konstruktor ASP-Netz

public class MyControl : WebControl, IScriptControl 
{ 

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

meine aspx

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

Antwort

3

Markup-Werte sind in Ihrer Kontrolle Konstruktor nicht zur Verfügung, aber sie aus Ihrer Kontrolle OnInit Veranstaltung zur Verfügung stehen.

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

    base.OnInit(e); 
} 
+1

aber wie kann ich auf Height in GetScriptDescriptors() -Methode zugreifen? –

+0

meinst du ich muss Höhe in anderen Variablen speichern? this.U = base.Height; –

+0

Ich folge nicht vollständig, was Sie versuchen, und habe keine Vertrautheit mit der 'IScriptControl'-Schnittstelle. – andleer

1

Wie @andleer sagte Markup noch in Kontrolle Konstruktor nicht gelesen wurde, damit alle Eigenschaftswerte, die in Markup angegeben sind in Konstruktor nicht verfügbar sind. Berechnen Sie eine andere Eigenschaft auf Anforderung, wenn es verwendet werden soll und stellen Sie sicher, dass Sie nicht vor OnInit verwenden:

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