Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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 从Usercontrol内部获取Html生成?_Asp.net_User Controls_Lifecycle - Fatal编程技术网

Asp.net 从Usercontrol内部获取Html生成?

Asp.net 从Usercontrol内部获取Html生成?,asp.net,user-controls,lifecycle,Asp.net,User Controls,Lifecycle,我开发了一个自定义用户控件。对于特定的需要,我必须从其中的usercontrol获取html生成,并仅在页面主体中显示它 我认为可能会重载RenderControl(HtmlTextWriter),但我不知道如何重载 谢谢您可以在内存中呈现控件,将其保存在字符串中,然后按照您所说的在页面的某个位置打印此字符串。下面是加载控件并在内存中呈现它,然后在字符串中显示结果的代码 // load the control var oTesto = Page.LoadControl("Test

我开发了一个自定义用户控件。对于特定的需要,我必须从其中的usercontrol获取html生成,并仅在页面主体中显示它

我认为可能会重载RenderControl(HtmlTextWriter),但我不知道如何重载


谢谢

您可以在内存中呈现控件,将其保存在字符串中,然后按照您所说的在页面的某个位置打印此字符串。下面是加载控件并在内存中呈现它,然后在字符串中显示结果的代码

    // load the control
    var oTesto = Page.LoadControl("Testo.ascx");

    // here you need to run some initialization of your control
    //  because the page_load is not loading now.

    // a string writer to write on it
    using(TextWriter stringWriter = new StringWriter())
    {
      // a html writer
      using(HtmlTextWriter GrapseMesaMou = new HtmlTextWriter(stringWriter))
      {
        // now render the control inside the htm writer
        oTesto.RenderControl(GrapseMesaMou);

        // here is your control rendered output.
        strBuild = stringWriter.ToString();
      }
    }
要捕获控件的呈现,您可以使用as:


您可以将渲染放在控件类中。

多亏了您,但我想在usercontrol中执行此操作。我在网页上做不到。所以我想我必须在用户控件生命周期内完成它!这就是我要找的。但我有个问题。在这个控件中,我插入了另一个usercontrol程序,但它没有添加到TextWriter中。有什么解决方案吗?哇,这正是我使用ajax和一个小小的.net ashx处理程序加载部分页面所需要的!loadtemplate.ashx?tpl=edituser&lang=pt BR。@FredericMalenfant是的,如果你找到了如何使用它,这段小代码有很大的威力。。。
protected override void Render(HtmlTextWriter writer)
{
    System.IO.StringWriter stringWriter = new System.IO.StringWriter();

    HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);

    // now the control is inside the htmlWriter as final rendered text
    base.Render(htmlWriter);

    // here is how to make the control render itself
    // base.Render(writer);
}