c# - aspx 文件中的 If 语句

标签 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>

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

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

这只是我的问题,还是这只是一个非常不直观的界面?只要用户控件在页面上,它实际上有可能根本不加载/执行它吗?

最佳答案

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

<div>
    <units:MyUserControl runat="server" SomeSetting="<%= Something %>" />
</div>

编辑:在原始帖子中编辑答案:

<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);
}

这样你只会在 Something 为真时发出(和加载)用户控件

关于c# - aspx 文件中的 If 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16809017/

相关文章:

c# - 在 Asp.net MVC4 中访问 ViewBag 时出现 NullReferenceException

asp.net - 一键执行客户端和服务器端代码?

c# - 设置 <form action> 属性时 LinkBut​​ton 事件不会触发

c# - 数据绑定(bind)到数据表或gridview时出错

c# - JS 喜欢 C# 中的枚举

c# - Web 窗体对象引用未设置为对象的实例

c# - asp net forms身份验证无法在同一服务器上同时登录两个应用程序

css - asp.net webforms 嵌套母版页和 css

c# - 插入后更新 GridView

asp.net - 图像未从主题布局中显示(Orchard CMS)