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

发布于 2024-12-13 18:59:19 字数 263 浏览 1 评论 0原文

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

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

但不能:

xxx.Aproperty=...

那么正常的方法是什么?谢谢!

I have a WebControl and it has a property. However, value of this property should not be changed once the control has been constructed... in other words, the property can be set only in some code like:

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

but not:

xxx.Aproperty=...

so what is the normal way to do that? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

鸩远一方 2024-12-20 18:59:19

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

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

private string _aProperty;

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

The properties that you are using in markup must be public properties with a public getter and setter. There is no special syntax for "only set this once".

What you can do is check in the setter whether it was already set and if so, not set to the new value.

private string _aProperty;

public string Aproperty
{
    get { return _aProperty;}
    set
    {
       if(_aProperty == null)
       {
          _aProperty = value;
       }
    }
}
白鸥掠海 2024-12-20 18:59:19

你应该能够使用

xxx.Attributes("Aproperty")

You should be able to use

xxx.Attributes("Aproperty")
套路撩心 2024-12-20 18:59:19

所有 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; }
 }

All ASP.NET markup attributes are set as properties after the constructor is executed. You can select specific read-only properties to be set only in the constructor by using sub-classes of the control.

<!-- 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; }
 }
亢潮 2024-12-20 18:59:19

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

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

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

The property is probably using a combination of the EditorBrowsable and DesignerSerializationVisibility attributes:

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

The DesignerSerializationVisibility attribute shows the property in markup, and the EditorBrowsable attribute hides the property in code-behind.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文