2010-03-26 79 views
1

我想使用ascx作为模板,并以编程方式呈现它,使用生成的html作为ajax方法的返回值。呈现用户控件ascx

Page pageHolder = new Page(); 
MyUserControl ctlRender = (MyUserControl)pageHolder.LoadControl(typeof(MyUserControl),null); 

pageHolder.Controls.Add(ctlRender); 
System.IO.StringWriter swOutput = new System.IO.StringWriter(); 
HttpContext.Current.Server.Execute(pageHolder, swOutput, false); 
return swOutput.ToString(); 

这一切都会执行,并且用户控件的Page Load事件触发,但StringWriter始终为空。我在其他例子中看到过类似的代码,我错过了什么?

+0

你有没有解决这个问题?我也得到空字符串。 – RoboJ1M 2012-09-20 12:22:31

回答

0

你总是要使用像this.Controls.Add(TemplateControl.LoadControl(” 〜/ PathTo/YourControl.ascx“)

原因是,没有类型的内部映射到那里ascx文件(只有其他wa y周围)。所以这意味着如果初始化新的YourControl(),它将不会执行你在ascx部分定义的任何内容。如果你有

protected override void protected override void Render(HtmlTextWriter output) { 
    output.WriteLine("Test"); 
} 

这会给你“测试”的地方,你的控制。