ASP.NET how to Render a control to HTML?

前端 未结 3 1935
自闭症患者
自闭症患者 2020-11-27 18:18

I have any ASP.NET control. I want the HTML string how to do I get the HTML string of the control?

相关标签:
3条回答
  • 2020-11-27 18:52

    Accepted answer by David Basarab will not work if control is not part of the page. a7drew's answer seems unnecessary complex - no need in Context or Server.Execute.

    private string RenderControl()
    {
        var sb = new System.Text.StringBuilder();
        using (var stWriter = new System.IO.StringWriter(sb))
        using (var htmlWriter = new HtmlTextWriter(stWriter))
        {
            var p = new Page();
            var ctrl = (YourControl)p.LoadControl("~/controls/building blocks/YourControl.ascx");
            ctrl.Visible = true;
    
            // do your own init logic if needed
    
            p.Controls.Add(ctrl);
            ctrl.RenderControl(htmlWriter);
            return sb.ToString();
        }
    }
    
    0 讨论(0)
  • 2020-11-27 19:01

    This appears to work.

    public string RenderControlToHtml(Control ControlToRender)
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();
        System.IO.StringWriter stWriter = new System.IO.StringWriter(sb);
        System.Web.UI.HtmlTextWriter htmlWriter = new System.Web.UI.HtmlTextWriter(stWriter);
        ControlToRender.RenderControl(htmlWriter);
        return sb.ToString();
    }
    
    0 讨论(0)
  • 2020-11-27 19:13

    If your control is a web user control, this is how you can get to the HTML it emits from another page or handler:

    public void GetHtmlFromMySweetControl(HttpContext context)
    {
        HttpRequest httpRequest = context.Request;
        HttpResponse httpResponse = context.Response;
    
        string foo = httpRequest["foo"];
    
        Page pageHolder = new Page();
        string path = "~/usercontrols/MySweetControl.ascx";
        MySweetControl ctrl = (MySweetControl)pageHolder.LoadControl(path);
        ctrl.BindProducts(foo);
        pageHolder.Controls.Add(ctrl);
    
        StringWriter sw = new StringWriter();
        context.Server.Execute(pageHolder, sw, false);
        httpResponse.Write(sw.ToString());
    }
    
    0 讨论(0)
提交回复
热议问题