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 回答