ASP.NET comment rendre un contrôle en HTML?

J'en ai ASP.NET contrôle. Je veux la chaîne HTML Comment puis-je obtenir la chaîne HTML du contrôle?

27
demandé sur David Basarab 2008-09-12 17:17:46

3 réponses

Cela semble fonctionner.

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();
}
40
répondu David Basarab 2008-09-12 13:19:54

La réponse acceptée par David Basarab ne fonctionnera pas si le contrôle ne fait pas partie de la page. La réponse de a7drew semble complexe inutile-pas besoin de Context ou 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();
    }
}
7
répondu avs099 2015-09-24 15:57:31

Si votre contrôle est un contrôle utilisateur web, voici comment vous pouvez accéder au code HTML qu'il émet depuis une autre page ou un autre gestionnaire:

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());
}
6
répondu a7drew 2008-09-12 15:49:06