我正在建立一个在框中显示信息的网站。 将有不同的页面具有不同的框组合。他们将有很多共同的盒子。 因此,我将框作为用户控件,然后放在不同的页面上。不同的页面也将共享一个母版页。 但是,当开始开发2.框时,我遇到了一个问题:
1. box的Page_Load(或整个代码)运行正常,但Page_Load和2.框被忽略。这会导致很多空值导致aspx文件崩溃。
我的CT1.aspx包含此内容以使用两个用户控件:
<%@ Page Title="CustType1" Language="C#" MasterPageFile="~/MTCustomer/Master.master" AutoEventWireup="true" CodeFile="CT1.aspx.cs" Inherits="MTCustomer.CT1" %>
// Some HTML
<td ID="column1" style="width: 400px;">
<Box:CustomerInfoBoxAx runat="server" />
<Box:CustomerInfoBoxMt runat="server" />
</td>
// Some HTML
我的Web.config包含这个,以便用户控件可用:
<pages>
<controls>
<add tagPrefix="Box" tagName="InfoBoxA" src="~/Controls/InfoBoxA.ascx" />
<add tagPrefix="Box" tagName="InfoBoxB" src="~/Controls/InfoBoxB.ascx" />
</controls>
</pages>
我的用户控件A看起来很明显:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="InfoBoxA.ascx.cs" Inherits="Controls.InfoBoxA" %>
<% if (IsVisible("InfoBoxA") && Customer != null)
{ %>
<div>
<%-- Markup --%>
</div>
<% } %>
方框B看起来像这样:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="InfoBoxB.ascx.cs" Inherits="Controls.InfoBoxB" %>
<link rel="stylesheet" type="text/css" href="<%=VirtualPathUtility.ToAbsolute("~/Styles/InfoBoxStyle.css")%>">
<% if (IsVisible("InfoBoxB") && Customer != null)
{ %>
<div>
<%-- Markup --%>
</div>
<% } %>
我试图在page.aspx中交换两个用户控件的顺序,这也改变了一个人忽略了Page_Load(或整个代码)。基于此,看起来只有后面的第一个代码被执行,其余的被忽略。
编辑: 在遵循初始空引用异常之后出现的异常之后,我可以看到第一个用户控件中的Page.DataBind()仍在执行。这必然意味着这是导致第一个和第二个框的aspx文件运行的原因。但是我该如何解决这个问题?
答案 0 :(得分:1)
问题解决了。
我从所有用户控件中删除了Page.DataBind()
,并在CT1.aspx.cs(后面的页面代码)中将其从Page_Load()
移至OnLoadComplete()
。
通过执行此操作,所有文件中的Page_Load()
已在执行Page.DataBind()
之前执行。