我正在尝试构建一个Web用户控件,并在代码隐藏中为其属性设置一些默认值,如下所示:
[DefaultValue(typeof(int), "50")]
public int Height { get; set; }
[DefaultValue(typeof(string), "string.Empty")]
public string FamilyName { get; set; }
[DefaultValue(typeof(Color), "Orange")]
public System.Drawing.Color ForeColor { get; set; }
当我将用户控件添加到页面并调用它时没有任何属性:
<uc1:Usercontrol ID="uc" runat="server" />
未设置默认值,并且每个属性都为0或null。
我做错了什么?
感谢。
答案 0 :(得分:3)
DefaultValueAttribute
不会为您的财产设置任何值,它只是设计师的提示等等。
如果你想要一个默认值,你必须在构造函数中设置它(甚至更好,在属性初始值设定器中,它是在C#6中添加的)。如果要将您的东西存储在ViewState中,则需要扩展这些属性定义并使它们访问ViewState。然后在OnInit
方法中设置属性的默认值,以避免在客户端保留它们。
答案 1 :(得分:0)
来自http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx
请注意 DefaultValueAttribute不会导致使用属性的值自动初始化成员。您必须在代码中设置初始值。
换句话说,DefaultValueAttribute只是为您提供了一个声明您想要该值的位置。您仍然必须编写代码来填充属性中的值。