如何为ASPX UserControl属性设置默认值?

时间:2009-08-12 06:26:37

标签: c# user-controls default-value custom-properties

我在页面上定义了一个用户控件,如下所示:

<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”,但它没有我想要的效果。

有人能发现我做错了吗?

3 个答案:

答案 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不会   导致成员自动   用属性初始化   值。您必须设置初始值   在你的代码中。