如果是aspx文件中的语句

我有一些基本上看起来像这样的代码:

This markup should not be output if Something==true.

取决于Something ,其中一个是隐藏的,这很好。 但是如果我在用户控件中设置断点,我会注意到它被加载了两次(对于上面的每个控件都加载了一次)并且它的所有逻辑都运行了两次。 我当然可以使用占位符或多视图来控制它,但同样的事情似乎适用 – OnLoad / Page_Load等对于页面上实际存在的每个控件运行一次。

编辑:我显示/隐藏这个的原因是因为我需要在控件周围包含一些标记,如果Something == true 。 我可以在控件之前和之后的if-else中包装“unique markup”本身,但这对于真正应该像我上面想象的那样简单的东西来说似乎很脏。 在这两种情况下,用户控件本身应该完全相同,对不起它具有的混乱属性。

它只是我,还是这只是一个非常不直观的界面? 并且只要它在页面上,它实际上是否可以不加载/执行用户控件?

由于页面上有两个控件,因此它们都会呈现它们。 您创建的if-check仅确定它是否包含在输出中。 防止这种情况的最简单方法是更改​​代码,如下所示:

 

编辑 :回答在原帖中编辑:

 
<% if(Something) { %>
This markup should not be output if Something==true.
<% } else { %> <% } %>
MyUserControl ctrl = (MyUserControl)LoadControl("/pathtousercontrol.ascx") if (something){ phItemInDiv.Controls.Add(ctrl); } else{ phItemOutsideDiv.Controls.Add(ctrl); }

这样,如果Something为true,您将只发出(并加载)用户控件

在我看来,最好的方法是在ASPX中声明一次用户控件。

在后面的代码中,在PageLoad上,应用您认为合适的逻辑:

 if(something) MyUserControl.SomeSettings = ... 

如果在年表中存在问题,请在PreLoad中执行上述逻辑,因为它将在页面的页面加载及其所有相关用户控件之前触发。

编辑:

您可以使用Enabled = false在用户控件上放置两个不同的ID。 在Page_load中,根据您需要的逻辑将Enabled设置为其中一个。