Asp.net:条件加载用户控件失败

Ola*_*avJ 6 asp.net user-controls

你好(对不起的标题感到抱歉)

我有一个用户控件,它根据以下某些条件加载不同的其他用户控件:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="SubPage.ascx.cs" Inherits="SubPage" %>
<%@ Register Src="<srcA>" TagName="A" TagPrefix="CTRL" %>
<%@ Register Src=">srcB>" TagName="B" TagPrefix="CTRL" %>

<% if (someValue == 1) { %>
    Loading user control A..
    <CTRL:A runat="server" />
<% } else { %>
    Loading user control B..
    <CTRL:B runat="server" />
<% } %>
Run Code Online (Sandbox Code Playgroud)

结果看起来是正确的; 显示预期的内容.但是我注意到即使someValue!= 1和控件B显示,控件A仍然在幕后加载(调用页面加载).

为什么是这样?什么是更好的方法?谢谢.

Tim*_*ter 3

Page_Load 被调用是因为您处理了该事件。不要尝试以这种方式加载它们,而是使用可见属性而不是代码隐藏。

公开控制器(在您的情况SubPage.ascx下)在更改可见状态后调用的公共函数以加载 UserControl 的内容。不可见的控件根本不会呈现为 html。

如果您并不真正需要,则动态加载控件可能会导致不必要的视图状态或事件处理问题。以下是关于动态用户控件提到的一些其他缺点。