Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在ascx中呈现用户控件_Asp.net_User Controls - Fatal编程技术网

Asp.net 在ascx中呈现用户控件

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.

我想使用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();
这将全部执行,并触发用户控件的页面加载事件,但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");
} 

这将在您将控件渲染到的位置进行“测试”。

您解决过这个问题吗?我还得到了空字符串。