我有一些代码基本上是这样的:

<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等运行一次.

EDIT:

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

推荐答案

由于页面上有两个控件,它将同时呈现这两个控件.您创建的if判断只确定是否包含在输出中.防止这种情况的最简单方法是如下更改代码:

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

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

<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为真时,才会发出(并加载)用户控件

Asp.net相关问答推荐

无法在Microsoft Windows Server 2016(数据中心)上运行.NET可移植性分析器

在 ASP.Net 中使用自定义 RoleProvider 时如何允许多个角色查看页面

如何使用 executeReader() 方法仅检索一个单元格的值

即使使用正确的 Accepts 标头,WebAPI 也不会返回 XML

我需要更改什么以允许我的 IIS7 ASP.Net 3.5 应用程序创建事件源并将事件记录到 Windows EventLog?

Ef core:执行 MaxAsync 时序列不包含任何元素

ASP.NET 中的 <% %>(嵌入式代码块)

MVC 3视图中的当前上下文中不存在名称'HTML'

如何获取 ActionLink 的工具提示?

带有文件名的 ASP.net MVC4 WebApi 路由

使下拉列表项不可 Select

确定哪个 w3wp.exe 进程属于 Windows 7 / IIS7.5 中的哪个 App Pool?

如何在实体框架中添加表?

在后面的代码中删除 css 类

为什么 IFormFile 显示为空,我该如何解决?

强制 IIS Express 进入classic 管道模式

在 ASP.NET 中获取服务器的 IP 地址?

RegisterStartupScript 不适用于 ScriptManager、Updatepanel.这是为什么?

如何将 DataTable 转换为类 Object?

如何创建代表 colored颜色 的随机十六进制字符串?