3

次のように、ページで定義されたユーザー コントロールがあります。

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

次のように、カスタム プロパティを使用して、別のページで同じコントロールを再利用したいと考えています。

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

MyCustomProperty の目的は、MyUserControl 内の一部のテキストを、指定したとおりに制御することです。

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

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

4

3 に答える 3

5

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

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

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

    ...
}

また、コーディングしたプロパティはポストバックに耐えられないことに注意してください。これがラウンド トリップ間の重要な動作である場合は、必ずビュー ステートに追加してください。

于 2009-08-12T06:36:37.460 に答える
2

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

private string _MyCustomProperty = "View";
public string MyCustomProperty 
{
  get
  {
    return _MyCustomProperty;
  }
  set
  {
    _MyCustomProperty = value;
  }
}
于 2009-08-12T06:38:26.863 に答える
1

MSDN に記載されている についてのメモを見ると、DefaultValue何が間違っているのかがわかります -

ADefaultValueAttributeは、メンバーが属性の値で自動的に初期化されることはありません。コードで初期値を設定する必要があります。

于 2009-08-12T06:37:18.677 に答える