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

老实说,在您的情况下,最简单、最干净和最优雅的解决方案是使用Visible属性,而不是创建其他 boolean 和 makeVisible具有相同的 value

另一方面,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 回答