呈现用户控件ascx

时间:2010-03-26 14:23:57

标签: 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.IO.StringWriter();
HttpContext.Current.Server.Execute(pageHolder, swOutput, false);
return swOutput.ToString();

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

2 个答案:

答案 0 :(得分:3)

你试过这个:

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();
}

直接来自这篇文章:

ASP.NET Tip: Render Control into HTML String

答案 1 :(得分:0)

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

原因是,没有类型的内部映射到ascx文件(只有另一种方式arround)。所以这意味着如果初始化新的YourControl(),它将不会执行您在ascx部分中定义的任何操作。如果你有

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

这会给你"测试"在你控制的地方。