Asp.net 在ascx中呈现用户控件
我想使用ascx作为模板,并以编程方式呈现它,使用生成的html作为ajax方法的返回值Asp.net 在ascx中呈现用户控件,asp.net,user-controls,Asp.net,User Controls,我想使用ascx作为模板,并以编程方式呈现它,使用生成的html作为ajax方法的返回值 Page pageHolder = new Page(); MyUserControl ctlRender = (MyUserControl)pageHolder.LoadControl(typeof(MyUserControl),null); pageHolder.Controls.Add(ctlRender); System.IO.StringWriter swOutput = new System.
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();
这将全部执行,并触发用户控件的页面加载事件,但StringWriter始终为空。我在其他示例中看到过类似的代码,我缺少什么?您是否尝试过:
public string RenderControl(Control ctrl)
{
StringBuilder sb = new StringBuilder();
StringWriter tw = new StringWriter(sb);
HtmlTextWriter hw = new HtmlTextWriter(tw);
ctrl.RenderControl(hw);
return sb.ToString();
}
直接摘自本文:
您必须始终使用这样的.Controls.Add(TemplateControl.LoadControl(“~/PathTo/YourControl.ascx”) 原因是,没有类型到ascx文件的内部映射(只有相反的方式)。因此,这意味着如果初始化新的YourControl(),它将不会执行您在ascx部分中定义的任何操作。如果
protected override void protected override void Render(HtmlTextWriter output) {
output.WriteLine("Test");
}
这将在您将控件渲染到的位置进行“测试”。您解决过这个问题吗?我还得到了空字符串。