关于Visible=false和display:none的问题

8
如果我将某个控件的属性Visible设置为“false”,那么在生成的aspx页面的HTML中,我将看不到该控件。但是,当我在该控件的style标签中使用display:none时,在HTML中我会看到该控件被灰色显示。为什么会这样呢?
另外,如果我发现页面上有一些不再需要的控件:
1. 我应该将其从页面中注释掉吗? 2. 应该将其属性设置为Visible=false吗? 3. 应该将其设置为display:none吗?
在考虑时间限制和页面负荷的情况下,哪种方法最好呢?
以下是我的测试页面生成的HTML:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> </title>
</head>
<body>
<form id="form1" action="testvisibility.aspx" method="post" name="form1">
<div>
<input id="__VIEWSTATE" type="hidden" value="/wEPDwUKMTY2NDk3NDQzNQ9kFgICAw9kFgQCBw8PFgIeB1Zpc2libGVoZGQCCQ8WAh4Fc3R5bGUFDWRpc3BsYXk6bm9uZTtkZEjYzMWMovvrGmuSrQHwc5ZXgqXCrf+lekz1GgsdjUd+" name="__VIEWSTATE">
</div>
<div>
visiblelabel::
<span id="visiblelabel">visiblelabel</span>
<br>
labelwithvisiblefalseonaspx::
<br>
labelwithdisplaynoneonaspx::
<div style="display: none;">
<span id="labelwithdisplaynoneonaspx">labelwithdisplaynoneonaspx</span>
</div>
<br>
labelwithvisiblefalseonserverside::
<br>
labelwithdisplaynoneonserverside::
<div id="divforlabelwithdisplaynoneonserverside" style="display: none;">
<span id="labelwithdisplaynoneonserverside">labelwithdisplaynoneonserverside</span>
</div>
<br>
</div>
</form>
</body>
</html>
4个回答

10

如果你想通过Ajax等方式动态地显示或隐藏控件,或者控件包含页面需要的信息,请在CSS中设置display:none

如果您不希望在某些情况下渲染控件,请将Visible="false"设置为false。由于它可以将控件的HTML从页面中剔除,因此可以使页面稍微变小--但如果您想通过Ajax等方式显示控件,则此方法将无法实现。

如果您根本不想渲染控件,请不要将其注释掉--请将其完全删除。所有控件,无论是否可见,都需要处理,因此如果您永远不打算呈现控件,则Visible=false会浪费CPU(并可能导致副作用)。而且真的不希望有很多被注释掉的东西在周围漂浮;这只会让维护更加困难。如果您发现以后需要它,可以随时从版本控制中获取它。(您正在使用SVN/Git/CVS/某种东西,对吗?)


5
Visible属性是控件的一个属性,当设置为false时,控件不会呈现。这比设置display:none要好得多,因为在后一种情况下,控件将以display:none样式呈现,以便浏览器不会显示它。
如果您不想让控件可见,但其中包含您想在客户端(通过JavaScript等)使用的数据,则display:none可能会有用。在这种情况下,将Visible属性设置为false将不起作用。

谢谢@Petar,是的,如果我们想通过Javascript操作内容,那么我们应该使用display>none,否则它不会起作用 - ismnoiet

2

我无法说哪一个更好,这取决于情况。如果你想在客户端使用该控件(即希望通过JavaScript访问该控件),则必须将显示设置为none。但是,如果你不需要在客户端使用它,最好将可见性设置为false。


1
我认为重要的区别在于您是否需要客户端访问面板内的项目。设置visible=false将导致面板不被呈现,因此您无法访问任何控件,再次客户端。而如果您设置display none,则可以访问控件,因为面板已被呈现。另外一个关注点是visible=false会避免验证。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接