我在页面上定义了一个用户控件,如下所示:
<uc:MyUserControl ID="MyUserControl" runat="server" Visible="true" />
我想在具有自定义属性的不同页面上重用相同的控件,如下所示:
<uc:MyUserControl ID="MyUserControl" runat="server" Visible="true"
MyCustomProperty="MyCustomText" />
MyCustomProperty的目的是将MyUserControl中的某些文本控制为我指定的任何文本。
对于第一种情况,我希望文本为“View”,对于第二种情况,我希望它是“MyCustomText”。
在我的用户控件中,我有以下代码来定义属性:
[DefaultValue("View")]
public string MyCustomProperty { get; set; }
我还有以下代码来根据属性更新文本:
LinkButton buttonSelect = e.Item.FindControl("ButtonSelect") as LinkButton;
if(buttonSelect != null) buttonSelect.Text = MyCustomProperty;
实际发生的情况是,在第一种情况下未提供自定义属性时,MyCustomProperty == null。
我试图通过添加DefaultValue属性来指定默认值应为“View”,但它没有我想要的效果。
有人能发现我做错了吗?
答案 0 :(得分:5)
可视化设计人员和代码生成器使用DefaultValueAttribute
来标识默认值,以便他们可以更智能地生成代码。在Visual Studio中,当属性返回的值与属性中声明的值不同时,此属性将导致属性以粗体显示。
DefaultValueAttribute
实际上并未为您设置属性的默认值。为此,只需在构造函数中指定合适的默认值即可。在你的情况下:
public partial class MyUserControl
{
public MyUserControl()
{
MyCustomProperty = "View";
}
...
}
另外,请注意,您编码的属性将无法在Postbacks中存活。如果这是往返之间的重要行为,请务必将其添加到查看状态!
答案 1 :(得分:2)
如何显式设置属性值而不是使用DefaultValue属性?
private string _MyCustomProperty = "View";
public string MyCustomProperty
{
get
{
return _MyCustomProperty;
}
set
{
_MyCustomProperty = value;
}
}
答案 2 :(得分:1)
如果您查看MSDN中有关DefaultValue
的说明,您就会明白自己做错了什么 -
DefaultValueAttribute
不会 导致成员自动 用属性初始化 值。您必须设置初始值 在你的代码中。