asp.net用户控件的默认属性值

时间:2011-03-25 19:51:22

标签: asp.net user-controls properties default

我需要一些帮助。我正在构建一个自定义Web用户控件,它将采用颜色。

截至目前,它在页面上有两个[asp:textbox] es(foregroundColour和backgroundColour)。

我希望我的前景颜色默认为“FFFFFF”,我的背景颜色默认为“000000”,我希望用户能够通过标签指定自己的初始值。

<ucFontChooser id="testchooser" runat="server" foregroundcolor="AABBCC" />

我有两个与文本框绑定的属性:

[DefaultValue("000000")]
public string ForegroundColor { get { return foregroundColorSelectorHex.Text; } set { foregroundColorSelectorHex.Text = value; } }
[DefaultValue("FFFFFF")]
public string BackgroundColor { get { return backgroundColorSelectorHex.Text; } set { backgroundColorSelectorHex.Text = value; } }

请注意,我知道DefaultValue仅适用于visual studio属性窗口,并且实际上并未设置任何值。

但是,我试图在usercontrol的构造函数中设置默认值:

ForegroundColor = "000000"

这给了我一个例外,因为在构造函数的时候,foregroundColorSelectorHex是 null

因此,如果我尝试在 OnInit 事件中设置默认值,或者在 * Page_Load * 上设置默认设置,那么它只会始终使用默认值I set和“AABBCC”的set属性值被覆盖。

我尝试做什么的正确方法是什么?

谢谢。

6 个答案:

答案 0 :(得分:2)

经过大量调试后,我想出了一个完全符合我需要的解决方案。

public override string ID
{
    set
    {
        base.ID = value;
        InitializeProperties();
    }
}

protected void InitializeProperties()
{
    ForegroundColor = "000000";
    BackgroundColor = "ffffff";
    EnableBackgroundColor = false;
    PrimaryFont = "Arial";
    SecondaryFont = "Helvetica";
    TertiaryFont = "sans-serif";
}

.NET框架将调用mycontrol.ID =“bla”,这是用户控制子控件进入上下文的时间。它被称为BEFORE包含控件/页面读取标签属性并设置属性。

看起来很讨厌,但效果很好。

答案 1 :(得分:1)

我认为完整的答案在这里回答的时间太长了,而且已经在MSDN上进行了记录。

请参阅此页:http://msdn.microsoft.com/en-us/library/ms972975.aspx

搜索“向用户控件添加属性和方法”文本

(但是请完整阅读整篇文章,以便了解细节。)

但是,从文章的代码中,如果属性为null,应该如何返回默认值。假设您有一个名为CategoryID的属性,该属性应定义为:

public int CategoryID
{
   get
   {
      object o = ViewState["CategoryID"];
      if (o == null)
         return 0;   // return a default value
      else
         return (int) o;
   }
   set
   {
      ViewState["CategoryID"] = value;
   }
}

您可以使用相同的模式来定义颜色。

答案 2 :(得分:1)

尝试在viewstate中保留属性的值,然后在Page_PreRender中设置.Text,如下所示:

 public string ForegroundColor
 {
     get
     {
        if (ViewState["forecolor"] == null)
        {
            ViewState["forecolor"] = "000000";
        }
        return (string) ViewState["forecolor"];
     }
     set
        {
            ViewState["forecolor"] = value;
        }
}

protected override void OnInit(EventArgs e)
{
     this.PreRender += Page_PreRender;
     base.OnInit(e);
}

private void Page_PreRender(object sender, EventArgs e)
{
     foregroundColorSelectorHex.Text = ForegroundColor;
}

答案 3 :(得分:0)

不确定这会有效,但您可以在page_load中执行以下操作:

protected void Page_Load {
    if (String.IsNullOrEmpty(ForegroundColor))
         ForegroundColor = "FFFFFF";
}

答案 4 :(得分:0)

您应该在不回发时初始化该值,即

if(!Page.IsPostBack){
  //Initialize your values
  ForegroundColor = "FFFFFF";

}

答案 5 :(得分:0)

你不能在构造函数中创建foregroundColorSelectorHex和backgroundColorSelectorHex吗?

public string ForegroundColor {
   get { return foregroundColorSelectorHex.Text; } 
  set { foregroundColorSelectorHex.Text = value; } 
}

public string BackgroundColor {
  get { return backgroundColorSelectorHex.Text; } 
  set { backgroundColorSelectorHex.Text = value; } 
}

public FontChooser () {
  foregroundColorSelectorHex = new ColorSelector();
  backgroundColorSelectorHex = new ColorSelector();

  ForegroundColor = "FFFFFF";
  BackgroundColor = "000000";
}