2009-08-12 5 views
3

次のように私は、ページ上で定義されたユーザーコントロールを持っている:ASPX UserControlプロパティのデフォルト値を設定するにはどうすればよいですか?

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

私は次のようにカスタムプロパティを別のページに同じコントロールを再利用したいと思っています:

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

目的のMyCustomPropertyは、MyUserControl内の一部のテキストを、指定するものになるように制御することです。

最初のケースでは、テキストを「表示」にし、2番目のケースでは「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"であることを指定しようとしましたが、意図したとおりの効果はありませんでした。

誰かが私が間違っていることを見つけることができますか?

答えて

5

DefaultValueAttributeは、ビジュアルデザイナーやコード生成者がデフォルト値を識別するために使用するため、コードをよりインテリジェントに生成できます。 Visual Studioでは、この属性によって、属性で宣言されている値と異なる値が返されるときに、プロパティが太字で表示されます。

DefaultValueAttribute実際にはプロパティのデフォルト値は設定されていません。これを行うには、コンストラクタで適切なデフォルト値を指定するだけです。あなたのケースでは:

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

    ... 
} 

また、あなたがコード化されているとして、それはポストバックに耐えられないだろう性質があることに注意してください。これがラウンドトリップ間の重要な振る舞いである場合は、必ずそれをビューステートに追加してください!

+0

私の場合、ポストバックは問題ではないので、あなたの答えはちょうど私が必要としたものでした。私は本当にMSDNのDefaultValueを参照する必要がありましたが、私はそれが私の心を越えていない他の多くのもので忙しかった...これは愚かなことです...あなたの助けをありがとう! – mezoid

1

あなたはおよそDefaultValue MSDNに与えられたノートを見てみるならば、あなたは間違って何をしているかを理解するだろう -

DefaultValueAttributeしません 原因自動的 属性ので初期化されるメンバー 値。あなたのコードに初期値 を設定する必要があります。

2

DefaultValue属性を使用するのではなく、プロパティ値を明示的に設定するのはどうですか?

private string _MyCustomProperty = "View"; 
public string MyCustomProperty 
{ 
    get 
    { 
    return _MyCustomProperty; 
    } 
    set 
    { 
    _MyCustomProperty = value; 
    } 
} 
関連する問題