是否有一种只在Web控件构造函数中设置的属性?

时间:2011-11-03 16:20:21

标签: asp.net constructor web-controls

我有一个WebControl,它有一个属性。但是,一旦构造了控件,就不应该更改此属性的值...换句话说,只能在某些代码中设置属性,如:

<ct:Acontrol ID="xxx" Aproperty="xxx"  runat="server"></ct:Acontrol>

但不是:

xxx.Aproperty=...

那么通常的做法是什么?谢谢!

4 个答案:

答案 0 :(得分:0)

您在标记中使用的属性必须是具有公共getter setter的公共属性。 “只设置一次”没有特殊的语法。

可以做的是检查setter是否已设置,如果已设置,则不设置为新值。

private string _aProperty;

public string Aproperty
{
    get { return _aProperty;}
    set
    {
       if(_aProperty == null)
       {
          _aProperty = value;
       }
    }
}

答案 1 :(得分:0)

你应该可以使用

xxx.Attributes("Aproperty")

答案 2 :(得分:0)

执行构造函数后,所有ASP.NET标记属性都将设置为属性。您可以通过使用控件的子类来选择仅在构造函数中设置的特定只读属性。

<!-- Aproperty=xxx -->
<ct:Acontrolxxx ID="xxx" runat="server"></ct:Acontrolyyy> 

<!-- Aproperty=yyy -->
<ct:Acontrolyyy ID="yyy" runat="server"></ct:Acontrolxxx> 

public class Acontrolxxx : Acontrolbase 
 {  
       public Acontrolxxx () {  base.Aproperty = xxx; }
 }

答案 3 :(得分:0)

该属性可能使用EditorBrowsableDesignerSerializationVisibility属性的组合:

[EditorBrowsable(EditorBrowsableState.Never)]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
public string SomeProperty { get; set; }

DesignerSerializationVisibility属性在标记中显示属性,EditorBrowsable属性在代码隐藏中隐藏属性。