我该如何为ASPX用户控件属性设置默认值?

3

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

<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; }

我还有以下代码来基于属性更新文本:
```html

我还有以下代码来基于属性更新文本:

```
LinkButton buttonSelect = e.Item.FindControl("ButtonSelect") as LinkButton;
if(buttonSelect != null) buttonSelect.Text = MyCustomProperty;

实际上,在第一个情况下,如果没有提供自定义属性,则MyCustomProperty == null。

我尝试使用DefaultValue属性指定默认值为“View”,但它并没有产生我期望的影响。

有人能发现我做错了什么吗?

3个回答

5
DefaultValueAttribute被视觉设计师和代码生成器用来标识默认值,以便更智能地生成代码。在Visual Studio中,当属性返回与属性中声明的值不同的值时,此属性将导致该属性以粗体显示。 DefaultValueAttribute实际上并不为您设置属性的默认值。要做到这一点,只需在构造函数中指定适当的默认值即可。在您的情况下:
public partial class MyUserControl
{
    public MyUserControl()
    {
        MyCustomProperty = "View";
    }

    ...
}

另外,请注意,您编写的属性将无法在 Postbacks 中保留。如果这是往返之间重要的行为,请确保将其添加到视图状态中!


在我的情况下,Postbacks 不是问题,所以您的答案正是我需要的。我真的应该在 MSDN 上查找 DefaultValue,但我忙于其他很多事情,没有想到......这很愚蠢,谢谢您的帮助! - mezoid

2
如何明确设置属性值而不使用DefaultValue属性呢?
private string _MyCustomProperty = "View";
public string MyCustomProperty 
{
  get
  {
    return _MyCustomProperty;
  }
  set
  {
    _MyCustomProperty = value;
  }
}

1
如果您查看MSDN中关于DefaultValue的注释,您就会明白您做错了什么-

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


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