15

我有一个带有一些布尔属性的 UserControl。如果没有在 .aspx 页面中明确设置,我希望它们默认设置为 true,或者如果无法设置默认值,至少强制声明它们。我知道有一种方法可以做到这一点,因为许多控件都需要属性,当您尝试运行它并且它们没有被声明时会破坏您的应用程序。

我该怎么做呢?

例子:

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

如果 showBox 不在此声明中,我希望系统中断或将默认值设置为“true”。

谢谢!

4

4 回答 4

27

我知道我迟到了,但我只想提一下

[DefaultValue(false)]

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

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

此属性仅用于在 Visual Studio 设计器中指示您认为的默认值。如果有人使用您的控件更改了此值,它将显示为粗体,表示此值是非默认值。

于 2011-01-26T17:41:18.163 回答
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; }
}
于 2009-05-04T07:23:01.350 回答
2

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

class myControl
{
    private bool _showBox = true;

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

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

于 2009-05-04T07:22:35.110 回答
2

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

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

  public bool ShowBox { get; set; }
}  
于 2013-08-08T17:00:43.293 回答