我在这样的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事件?
为什么会这样,以及如何阻止它被调用?
由于
答案 0 :(得分:2)
if
服务器标记确定该部分是否包含在输出中,但此部分将在Page
生命周期(PageRender
)中稍后决定。但是load
的{{1}}事件以及用户控件在此之前触发。这就是为什么用户控件的Page
事件仍在触发的原因。
现在针对您的问题,理想情况下,您应该在用户控件本身中检查Session是否为null。
希望这有帮助。