2009-08-12 11 views
3

Ich habe einen Steuer Benutzer auf einer Seite wie folgt definiert:Wie lege ich einen Standardwert für eine ASPX UserControl-Eigenschaft fest?

<uc:MyUserControl ID="MyUserControl" runat="server" Visible="true" /> 

ich die gleiche Kontrolle auf einer anderen Seite mit einer benutzerdefinierten Eigenschaft wiederzuverwenden bin zu wollen, wie folgt:

<uc:MyUserControl ID="MyUserControl" runat="server" Visible="true" 
MyCustomProperty="MyCustomText" /> 

Der Zweck MyCustomProperty soll einen Text in MyUserControl so steuern, wie ich es vorschlage.

Für den ersten Fall möchte ich den Text "View" und für den zweiten Fall möchte ich es "MyCustomText".

In meiner Benutzerkontrolle Ich habe den Code nach der Eigenschaft zu definieren:

[DefaultValue("View")] 
public string MyCustomProperty { get; set; } 

ich auch den folgenden Code habe, den Text zu aktualisieren, auf dem Grundstück basiert:

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

Was tatsächlich passiert, Wenn die benutzerdefinierte Eigenschaft im ersten Fall nicht angegeben wird, ist MyCustomProperty == null.

Ich habe versucht, anzugeben, dass der Standardwert "View" durch Hinzufügen des Attributs DefaultValue sein sollte, aber es hatte nicht die Wirkung, die ich beabsichtigte.

Kann jemand feststellen, was ich falsch mache?

Antwort

5

Die DefaultValueAttribute wird von visuellen Designern und Codegeneratoren verwendet, um den Standardwert zu identifizieren, damit sie Code intelligenter generieren können. In Visual Studio bewirkt dieses Attribut, dass eine Eigenschaft fett dargestellt wird, wenn die Eigenschaft einen Wert zurückgibt, der von dem im Attribut deklarierten Wert abweicht.

DefaultValueAttribute nicht tatsächlich den Standardwert der Eigenschaft für Sie festlegen. Geben Sie dazu einfach einen geeigneten Standardwert in Ihrem Konstruktor an. In Ihrem Fall:

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

    ... 
} 

Beachten Sie auch, dass die Eigenschaft, wie Sie es codiert haben Postbacks nicht überleben. Wenn dies zwischen den Rundreisen wichtig ist, müssen Sie es zum Ansichtszustand hinzufügen!

+0

In meinem Fall Postbacks sind kein Problem, also war Ihre Antwort genau das, was ich brauchte. Ich hätte eigentlich DefaultValue auf MSDN nachschlagen sollen, aber ich war mit so vielen anderen Dingen beschäftigt, dass es mir nicht in den Sinn kam ... was albern ist, weiß ich ... Danke, haufenweise für deine Hilfe! – mezoid

1

Wenn Sie in MSDN einen Blick auf die Note gegeben nehmen über DefaultValue, werden Sie verstehen, was Sie falsch machen -

A DefaultValueAttribute wird nicht Ursache ein Mitglied mit dem Attribut des automatisch initialisiert werden Wert. Sie müssen den Anfangswert in Ihrem Code festlegen.

2

Wie wäre es, den Eigenschaftswert explizit festzulegen, statt das DefaultValue-Attribut zu verwenden?

private string _MyCustomProperty = "View"; 
public string MyCustomProperty 
{ 
    get 
    { 
    return _MyCustomProperty; 
    } 
    set 
    { 
    _MyCustomProperty = value; 
    } 
} 
Verwandte Themen