|zyciis| 动态添加的UserControl如何能像页面正常添加的用户控件一样运行Page_Load等事件,谢谢

zyciis706 2010-03-23 10:00:06
如我有一个Nav.ascx


public partial class Nav : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("OK");
}
}

然后我有页面
Template.aspx,他在页面中加载了这个用户控件

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Template.aspx.cs" Inherits="YK.Shop.Web.Pay.Template" %>

<%@ Register Src="Nav.ascx" TagName="Nav" TagPrefix="uc" %>
<uc:Nav ID="Nav1" runat="server" />

Template2.aspx 这里页面没有加载,但是他在cs里面load了进来

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Template2.aspx.cs" Inherits="YK.Shop.Web.Pay.Template2" %>

Template2.aspx.cs

public partial class Template2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Page page = new Page();
Control control = page.LoadControl("/Pay/Nav.ascx");
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter wt = new HtmlTextWriter(tw);
control.RenderControl(wt);
Response.Write(tw.ToString());
}
}

--------------------------------------------------------------------
但是Template2.aspx并没有显示出"OK",那是因为page.LoadControl的方法并没有触发ascx的Load事件

问:
如何用代码的方式将出Nav.ascx他的效果和在页面添加的效果一样
谢谢

PS:也就是不管Nav.ascx怎么写,用Template2.aspx.cs里面写代码实现和Template.aspx 一样的显示效果
...全文
227 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2010-03-24
  • 打赏
  • 举报
回复
System.Web.UI.Control a = (System.Web.UI.Control)this.LoadControl("");
this.Controls.Add(a);
阿非 2010-03-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 zyciis706 的回复:]
如我有一个Nav.ascx

C# code

public partial class Nav : System.Web.UI.UserControl
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write("OK");
……
[/Quote]

protected void Page_Load(object sender, EventArgs e)
{
Page page = new Page();
Control control = page.LoadControl("/Pay/Nav.ascx");
System.IO.StringWriter tw = new System.IO.StringWriter();
HtmlTextWriter wt = new HtmlTextWriter(tw);
control.RenderControl(wt);
Response.Write(tw.ToString());
}


=>

Page page = new Page();
Control control = page.LoadControl("/Pay/Nav.ascx");

page.Controls.Add(control);

StringWriter writer = new StringWriter();

Server.Execute(page, writer, false);

Response.Write(writer.ToString());
Response.End();
  • 打赏
  • 举报
回复
Control就好了,不必声明为UserControl。或者声明为var最方便。
十八道胡同 2010-03-24
  • 打赏
  • 举报
回复
3楼的代码 会提示Nav看不到的...
1楼的代码 会提示无法隐士转换
十八道胡同 2010-03-24
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Template2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
UserControl control= (UserControl)Page.LoadControl("Nav.ascx") ;
Page.Controls.Add(control);
}
}
}

我试验过了,这样是可以的
criedshy 2010-03-24
  • 打赏
  • 举报
回复
public partial class Template2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if(!Page.IsPostBack)
{
Nav control = Page.LoadControl("/Pay/Nav.ascx") as Nav;
if(control!=null)
{
this.Controls.Add(control);
}
}
}
yanluosha 2010-03-23
  • 打赏
  • 举报
回复
page.controls.add(new Nav())
wuyq11 2010-03-23
  • 打赏
  • 举报
回复
Page.Controls.Add(Page.LoadControl("Nav.ascx"));
或者
UserControl a = Page.LoadControl("Nav.ascx");
Page.Controls.Add(a);

62,050

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧