Thursday, September 3, 2009

Render web user control in a web service


[WebMethod(EnableSession = true)]
[ScriptMethod]
public string RenderControl()
{
StringWriter tw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(tw);
string searchResultHtml = "";
Page page = new Page();
ScriptManager sm = new ScriptManager();
HtmlForm form = new HtmlForm();
HtmlGenericControl div = new HtmlGenericControl("UserControlDiv_DisplayResults");
ucDemoControl userControl = (ucDemoControl)page.LoadControl("~/Controls/ucDemoControl.ascx");

//init controlm properties like datasource or other

userControl.DataSource = null; //add something here

page.Controls.Add(form);
form.Controls.Add(sm);
form.Controls.Add(div);
div.Controls.Add(userControl);
HttpContext.Current.Server.Execute(page, tw, false);

searchResultHtml = tw.ToString().Substring(tw.ToString().IndexOf("<UserControlDiv_DisplayResults>") + 30);
searchResultHtml = searchResultHtml.Substring(1, searchResultHtml.IndexOf("</UserControlDiv_DisplayResults>") - 1);
return searchResultHtml;
}



kick it on DotNetKicks.com