Arv*_*tad 29 c# asp.net webforms
我有一些基本上看起来像这样的代码:
<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>
Run Code Online (Sandbox Code Playgroud)
取决于Something
,其中一个是隐藏的,这很好.但是如果我在用户控件中设置断点,我会注意到它被加载了两次(对于上面的每个控件都加载了一次)并且它的所有逻辑都运行了两次.我当然可以用占位符或多视图来控制它,但是同样的事情似乎适用 - 对于页面上实际存在的每个控件都运行一次OnLoad
/ Page_Load
etc.
编辑:
我显示/隐藏这个的原因是因为我需要在控件周围包含一些标记if Something == true
.我可以在控件之前和之后的if-else中包装"unique markup"本身,但这对于真正应该像我上面想象的那样简单的东西来说似乎很脏.在这两种情况下,用户控件本身应该完全相同,抱歉它具有令人困惑的属性.
它只是我,还是这只是一个非常不直观的界面?并且只要它在页面上,它实际上是否可以不加载/执行用户控件?
Ken*_*eth 46
由于页面上有两个控件,因此它们都会呈现它们.您创建的if-check仅确定它是否包含在输出中.防止这种情况的最简单方法是更改代码,如下所示:
<div>
<units:MyUserControl runat="server" SomeSetting="<%= Something %>" />
</div>
Run Code Online (Sandbox Code Playgroud)
编辑:回复在原帖中编辑:
<div>
<% if(Something) { %>
<div id="someUniqueMarkup">
This markup should not be output if Something==true.
<asp:placeholder id="phItemInDiv" runat="server" />
</div>
<% }
else { %>
<asp:placeholder id="phItemOutsideDiv" runat="server" />
<% } %>
</div>
MyUserControl ctrl = (MyUserControl)LoadControl("/pathtousercontrol.ascx")
if (something){
phItemInDiv.Controls.Add(ctrl);
}
else{
phItemOutsideDiv.Controls.Add(ctrl);
}
Run Code Online (Sandbox Code Playgroud)
这样,如果Something
为true,您将只发出(并加载)用户控件
归档时间: |
|
查看次数: |
57934 次 |
最近记录: |