在Html视图中使用Asp.NET控件属性中的变量

时间:2012-10-31 15:59:59

标签: c# asp.net

我想知道是否有办法做到这一点:

<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"/>
<% } %>

但是,第一个对我来说更直观。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

老实说,最简单,最干净,最优雅的解决方案使用Visible属性,而不是创建其他布尔值,而make Visible具有相同的值。< / p>

另一方面,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 Forms实践是与表示逻辑完全独立的标记。

答案 1 :(得分:2)

如果您的ShowLabel属性实际上只是标签的visibility属性的包装器,您只需将属性定义替换为:

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

但除了可见性属性的新名称之外,这并没有给你太多的东西。