我的工程是这样的:
有一个主页面:default.aspx,里面放置一个placeholder,这个placeholder加载了个“静态”的main.ascx用户控件。main.ascx由两个placeholder组成,这两个placeholder,一个用来“静态”加载login.ascx,另一个用来“动态”加载info.ascx用户控件
我想要实现的功能是,当在login.ascx里输入正确的用户名和密码并点击登录按钮后,info.ascx通过LoadControl和Controls.Add方法被动态加载,另外,info.ascx的Page_Load()事件里有一些查询,查询出最近的新闻并存放于该info.ascx的控件gird中,照理说,当我在点击login.ascx的登录按钮后,main.ascx的placeholder动态加载了info.ascx用户控件, 接着info.ascx执行Page_Load(),于是查询出最近的通知,并显示在main.ascx的placeholder中。但结果却是:当点击login.ascx的登录按钮后,info.ascx页面能够显示,但它的grid里并没有数据记录,进一步的测试后我发现,虽然info.ascx在login.ascx的按钮单击事件后能够被动态加载到main.ascx的placeholder并显示出来,但是在这个过程中,info.ascx的Page_Load事件没有被执行!!(我在Page_Load()里写了Response.Write("OK");以及用session传递字符串作为标志等,结果都没显示出来)我在login.ascx里按钮单击事件里用session保存了用户控件,在main.ascx里加载这个控件不知道说清楚了没有,请各位帮忙
急,谢了
有一个主页面:default.aspx,里面放置一个placeholder,这个placeholder加载了个“静态”的main.ascx用户控件。main.ascx由两个placeholder组成,这两个placeholder,一个用来“静态”加载login.ascx,另一个用来“动态”加载info.ascx用户控件
我想要实现的功能是,当在login.ascx里输入正确的用户名和密码并点击登录按钮后,info.ascx通过LoadControl和Controls.Add方法被动态加载,另外,info.ascx的Page_Load()事件里有一些查询,查询出最近的新闻并存放于该info.ascx的控件gird中,照理说,当我在点击login.ascx的登录按钮后,main.ascx的placeholder动态加载了info.ascx用户控件, 接着info.ascx执行Page_Load(),于是查询出最近的通知,并显示在main.ascx的placeholder中。但结果却是:当点击login.ascx的登录按钮后,info.ascx页面能够显示,但它的grid里并没有数据记录,进一步的测试后我发现,虽然info.ascx在login.ascx的按钮单击事件后能够被动态加载到main.ascx的placeholder并显示出来,但是在这个过程中,info.ascx的Page_Load事件没有被执行!!(我在Page_Load()里写了Response.Write("OK");以及用session传递字符串作为标志等,结果都没显示出来)我在login.ascx里按钮单击事件里用session保存了用户控件,在main.ascx里加载这个控件不知道说清楚了没有,请各位帮忙
急,谢了
c.ID = "xxx";
ph.Controls.Add(c);下面是参考编码
1.default.aspx:
<%@ Register TagPrefix="cc" TagName="Main" src="main.ascx" %>
Main page:
<form runat="server">
<asp:PlaceHolder id="ph" runat="server">
<cc:Main id="main1" runat="server" />
</asp:PlaceHolder><asp:Button id="btnRefresh" runat="server" Text="Refresh" />
</form>2. main.ascx:
<%@ Register TagPrefix="cc" TagName="Login" src="login.ascx" %><cc:Login id="Login1" runat="server" OnLogin="DoLogin"/><asp:PlaceHolder id="ph" runat="server">
</asp:PlaceHolder><script language="C#" runat="server">
public bool InfoLoaded
{
get
{
object o = ViewState["InfoLoaded"];
if (o==null)
return false;
else
return (bool)o;
} set
{
ViewState["InfoLoaded"] = value;
}
}void Page_Load(Object sender, EventArgs e)
{
if (InfoLoaded)
LoadInfo();
}void LoadInfo()
{
Control c = LoadControl("info.ascx");
c.ID = "xxx";
ph.Controls.Add(c);
}void DoLogin(Object sender, EventArgs e)
{
LoadInfo();
InfoLoaded = true;
}
</script>
3. login.ascx:
<script language="C#" runat="server">
public event EventHandler Login;void DoLogin(Object sender, EventArgs e)
{
if (Login!=null)
Login(sender,e);
}
</script>
<asp:Button id="btn" runat="server" Text="Login" OnClick="DoLogin" />4. info.ascx:
info.ascx:
<script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e)
{
Response.Write("Page_Load in Info.ascx");
}
</script>