5

これが私のカスタム コントロールです。WebControl クラスから [Height] プロパティを継承します。他のプロパティを計算するためにコンストラクターでアクセスしたいのですが、その値は常に 0 です。

    public class MyControl : WebControl, IScriptControl
{

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

私のaspx

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

2 に答える 2

3

マークアップ値は、コントロールのコンストラクターでは使用できませんが、コントロールの OnInit イベント内から使用できます。

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

    base.OnInit(e);
}
于 2012-11-16T16:39:03.510 に答える
1

@andleerが言ったように、マークアップはコントロールのコンストラクターでまだ読み取られていないため、マークアップで指定されたプロパティ値はコンストラクターで使用できません。使用しようとしているときにオンデマンドで別のプロパティを計算し、OnInitの前に使用しないようにしてください。

private int fAnotherPropertyCalculated = false;
private int fAnotherProperty;
public int AnotherProperty
{
  get 
  {
    if (!fAnotherPropertyCalculated)
    {
       fAnotherProperty = Calculate(Height);
       fAnotherPropertyCalculated = true;
    }
    return fAnotherProperty;
  }
}
于 2012-11-29T02:38:08.653 に答える