我想知道是否有办法做到这一点:
<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"/>
<% } %>
但是,第一个对我来说更直观。有什么想法吗?
答案 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; }
}
但除了可见性属性的新名称之外,这并没有给你太多的东西。