为什么始终使用此代码为我的ASP.NET用户控件调用Page_Load事件?

时间:2014-02-26 11:43:24

标签: asp.net

我在这样的ASPX文件中有一段代码:

<% if(!string.IsNullOrEmpty(Session["MySessionVar"] as string)) { %>
<td valign="top" style="width: 300px; height:20px;">
    <uc:MyUserControl ID="myUserControl" runat="server" />
</td>
<% } %>

此代码的要点是,如果会话变量不存在或为空,则用户控件将不会加载到页面上。

但是,我发现无论会话变量的值(或非值),用户控件仍会尝试加载自身(它会调用Page_Load,因为会话变量值为null或为空而引发错误) 。

我通过用脚本标记替换用户控件HTML代码来验证'if'语句逻辑是否正确,以向用户显示“警报”对话框。我发现仅当会话变量存在且不为空时才会正确显示警报框。

似乎当会话变量确实存在(并且不为空)时,用户控件将出现在页面上。但是当会话变量不存在(或为空)时,用户控件将不会出现在页面上......但仍会调用Page_Load事件?

为什么会这样,以及如何阻止它被调用?

由于

1 个答案:

答案 0 :(得分:2)

if服务器标记确定该部分是否包含在输出中,但此部分将在Page生命周期(PageRender)中稍后决定。但是load的{​​{1}}事件以及用户控件在此之前触发。这就是为什么用户控件的Page事件仍在触发的原因。

现在针对您的问题,理想情况下,您应该在用户控件本身中检查Session是否为null。

希望这有帮助。