【发布时间】:2013-05-24 10:13:15
【问题描述】:
我有一些基本上看起来像这样的代码:
<div>
<% if(Something) { %>
<div id="someUniqueMarkup">
This markup should not be output if Something==true.
<units:MyUserControl runat="server"/>
</div>
<% }
else { %>
<units:MyUserControl runat="server" />
<% } %>
</div>
取决于Something,其中一个是隐藏的,这很好。但是如果我在用户控件中设置断点,我注意到它被加载了两次(上面的每个控件一次)并且它的所有逻辑都运行了两次。我当然可以使用占位符或多视图来控制它,但似乎同样适用 - OnLoad/Page_Load 等对页面上实际存在的每个控件运行一次。
编辑:
我显示/隐藏它的原因是因为如果Something == true,我需要在控件周围包含一些标记。我可以在控件之前和之后将“唯一标记”本身包装在 if-else 中,但这对于真正应该像我上面想象的那样简单的东西来说似乎很脏。用户控件本身在这两种情况下应该完全相同,抱歉它有令人困惑的属性。
只是我,还是这只是一个非常不直观的界面?只要它在页面上,实际上是否可以根本不加载/执行用户控件?
【问题讨论】:
-
我想只有你。
-
为什么不使用代码隐藏?您的控件是服务器端的,因此在添加它们的 ID 参数时,您可以设置您的设置。并且只使用一次,正如@Kenneth 在他的回答中提到的那样。
-
in·tu·i·tive /inˈt(y)o͞oitiv/ 形容词 使用或基于即使没有有意识的推理而感觉真实的事物;本能的。 (计算机软件首席)易于使用和理解。我不是“骗子”——这不直观。即使条件为假,哪种编程语言也会在 if 语句中执行某些操作?答:在这个例子中,除了 WebForms 之外,几乎没有。
-
@GrantThomas 如果你问我,即使块“未执行”,块内的代码也会被执行。
-
我实际上不同意。或者,这是一个笼统的概括。但这是真的。整个页面生命周期有多直观?添加数据绑定和数据绑定事件。还有那些肮脏的、生成的 Designer.cs 文件。这一切如何直观?如果不了解 Webforms 的工作原理,任何人都无法理解这些东西,而大多数其他框架通常可以通过了解所使用的语言和主要模式来理解。