I have a problem with the default value attribute.
When I add my control to page at design mode, default value does not work. This is my code:
[DefaultProperty("Text")]
[ToolboxData("<{0}:KHTLabel runat=server key=dfd></{0}:KHTLabel>")]
public class KHTLabel : Label ,IKHTBaseControl
{
[Bindable(true)]
[Category("Appearance")]
[DefaultValue("KHT")]
[Localizable(true)]
public string Key
{
get
{
String s = (String)ViewState["Key"];
return ((s == null) ? String.Empty : s);
}
set
{
ViewState["Key"] = value;
}
}
protected override void RenderContents(HtmlTextWriter writer)
{......
But, at design mode when I add a control from the toolbox, the key does not exist
<cc1:KHTLabel ID="KHTLabel1" runat="server"></cc1:KHTLabel>
That’s not what the
[DefaultValue]attribute does, I’m afraid. What it does it allows the Visual Studio designer (specifically the “Properties” grid) to determine what to show by default and therefore how to know to show the value as bold when it’s different from the default.It’s upto you to have something in your code that holds the value “KHT” as the default value. There’s a bit of relevant detail in this 2008 blog posting of mine.
The following code is fairly rudimentary, and I haven’t been able to verify it compiles, but it should give you some idea how you could handle “forcing” the value of your
DefaultValueAttributes into theViewState: