代码之家  ›  专栏  ›  技术社区  ›  mezoid

如何设置ASPX用户控件属性的默认值?

  •  3
  • mezoid  · 技术社区  · 15 年前

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

    <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 回复  |  直到 15 年前
        1
  •  5
  •   Paul Turner    15 年前

    这个 DefaultValueAttribute 被可视化设计器和代码生成器用来标识默认值,以便它们更智能地生成代码。在Visual Studio中,当属性返回的值与属性中声明的值不同时,此属性将导致以粗体显示属性。

    默认值属性 不会为您实际设置属性的默认值。为此,只需在构造函数中指定适当的默认值。在你的情况下:

    public partial class MyUserControl
    {
        public MyUserControl()
        {
            MyCustomProperty = "View";
        }
    
        ...
    }
    

    另外,请注意,您所编码的属性在回发后将无法生存。如果这是往返旅行之间的重要行为,请确保将其添加到视图状态中!

        2
  •  2
  •   Jakob Gade    15 年前

    如何显式设置属性值而不是使用defaultvalue属性?

    private string _MyCustomProperty = "View";
    public string MyCustomProperty 
    {
      get
      {
        return _MyCustomProperty;
      }
      set
      {
        _MyCustomProperty = value;
      }
    }
    
        3
  •  1
  •   Kirtan    15 年前

    如果你看一下msdn中关于 DefaultValue 你会明白你做错了什么-

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