用户控件属性中的默认值

15

我有一个UserControl,其中包含几个布尔属性。如果在.aspx页面中没有明确设置它们,我希望它们默认为true,或者至少强制要求声明它们,如果没有设置默认值的方法。我知道有一种方法可以做到这一点,因为很多控件都有必需的属性,如果你试图运行它并且没有声明它们,则会导致应用程序崩溃。

我该怎么做?

示例:

<je:myControl runat="server" id="myControl" showBox="False">

如果在声明中遗漏了showBox, 我希望系统要么报错要么将默认值设置为“true”。

谢谢!

4个回答

27

我知道我来晚了,但我只是想提一下

[DefaultValue(false)]

不会将属性设置为false。请参见:http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx。它说:

"DefaultValueAttribute不会自动使用属性值来初始化成员。您必须在代码中设置初始值。"

这个属性仅用于指示在Visual Studio Designer中,您认为是默认值的内容。如果使用您的控件的人更改此值,则会以粗体显示,表示此值是非默认值。


22

像这样使用默认值定义属性:

private bool _ShowBox = false;
public bool ShowBox
{
    set { _ShowBox = value; }
}

或者在您的控件构造函数中设置默认值:

public MyControl()
{
    _ShowBox = false;
}

如果未分配,则抛出异常:

private bool _ShowBox = false;
public bool ShowBox
{
    set { _ShowBox = value; }
    get { return _ShowBox; }
}

如果(_ShowBox == null) { 可能是真的,因为你不能将布尔值设置为null。 - Peter

2

在声明变量时,只需设置所需的默认值:

class myControl
{
    private bool _showBox = true;

    [PersistenceMode(PersistenceMode.Attribute), DefaultValue(false)]
    public bool showBox
    {
        get { return _showBox; }
        set { _showBox = value; }
    }
}

可选,您可以为设计器添加DefaultValueAttribute。


2

ReSharper建议使用自动属性,并在构造函数中设置默认值,如下所示:

public class MyControl
{
  public MyControl()
  {
    ShowBox = true;
  }

  public bool ShowBox { get; set; }
}  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接