0

これを行う方法があるかどうか疑問に思います:

<asp:Label ID="lblSomething" runat="server" Visible="this.ShowLabel"/>

およびコードビハインドで:

public bool ShowLabel {get;set;}

なぜ必要なのかと尋ねる人もいるかもしれませんが、コードビハインドでこれを言うよりも、このアプローチの方がクリーンだと思います。

lblSomething.Visible = this.ShowLabel

また、ソースビューでこれを言うこともできます:

<% if(this.ShowLabel){ %>
   <asp:Label ID="lblSomething" runat="server" Text="Something"/>
<% } %>

繰り返しになりますが、最初の方が直感的です。何か案は?

4

2 に答える 2

2

正直なところ、最も簡単でクリーンでエレガントなソリューションは、他のブール値を作成して同じ値にする代わりに、属性を使用VisibleVisibleすることです。

一方、Labelコントロールは封印されたクラスではありません。そのようなことをする必要がある場合は、次のようにプロパティを派生Labelさせて実装する方が良いでしょう:ShowLabel

private bool _showLabel;

public bool ShowLabel
{
    get { return _showLabel; }
    set
    {
        _showLabel = value;
        Visible = value
    }
}

最後に、新しいMyLabelコントロールの使用法は次のようになります。

<gray:MyLabel ID="lblSomething" runat="server" ShowLabel="true"/>

Visibleとにかく、繰り返しになりますが、 を使用してそのようなコントロールを隠している場合は、車輪を再発明しないでください。ASP.NETから提供されるものを使用してください。ただし、質問がサンプルを示しているが、実際のシナリオVisibleが他のものではない場合は、継承を使用する必要があると主張します (これは提案よりもエレガントです)。

実際、ASP.NET Web フォームの優れたプラクティスは、マークアップをプレゼンテーション ロジックから完全に分離することです。

于 2012-10-31T16:17:24.157 に答える
2

ShowLabelプロパティがラベルの可視性プロパティの単なるラッパーである場合は、プロパティ定義を次のように置き換えることができます。

public bool ShowLabel
{
    get { return lblSomething.Visible; }
    set { lblSomething.Visible = value; }
}

しかし、それは可視性プロパティの新しい名前以外には何も与えません。

于 2012-10-31T16:17:43.540 に答える