2010-01-21 3 views

ответ

6

Как только вы используете метод LoadControl(), чтобы получить его на странице, вы можете получить HTML, вызвав метод Render(). Это требует HtmlTextWriter писать, но это довольно просто построить:

var userControl = (userControlType)Page.LoadControl(....ascx); 
StringBuilder sb = new StringBuilder(); 
StringWriter SW = new StringWriter(SB); 
HtmlTextWriter htw = new HtmlTextWriter(new StringWriter(sb)); 
userControl.RenderControl(htw); 

string html = sb.ToString(); 

Если вы не в контексте страницы, есть other ways сделать это.

0

Вы не объясните, что вы подразумеваете под «получить свой HTML».

Если вы говорите о веб-клиенте, то способ получить разметку - , отправьте HTTP GET на URL.

+1

Я предполагаю, что он означает, что в серверном коде. – SLaks

+1

Я говорил о серверной стороне, но мне все еще интересно, что вы имеете в виду. Файл .ascx не имеет URL-адреса, не так ли? Я имею в виду, ASPX-страницы делают, но файлы ASCX не работают, верно? – JamesBrownIsDead

0

HTML для UserControl обычно не создается до тех пор, пока не будет вызван метод Render() UserControl. Этот метод генерирует HTML-код и отправляет контент в HtmlTextWriter.

Ознакомьтесь с документацией по UserControl.Render() для получения дополнительной информации.

1

я не проверял код, но и в теории, если у вас есть ссылка на ваш UserControl вы должны быть в состоянии назвать Рендер()

StringBuilder sb = new StringBuilder(); 
using (StringWriter tw = new StringWriter(sb)) 
using (HtmlTextWriter hw = new HtmlTextWriter(tw)) 
{ 
    ctrl.Render(hw); 
} 
return sb.ToString(); 
0

Дайте это попробовать, работает как чавканье для захвата генерируемые разметки из пользовательского элемента управления

Dim controlText As String = String.Empty 
    controlText = Me.GenerateControlMarkup("/SampleUserControl/Grid.ascx") 

Public Class SacrificialMarkupPage 
    Inherits Page 
    Public Overloads Overrides Sub VerifyRenderingInServerForm(ByVal control As Control) 
    End Sub 
End Class 

Private Function GenerateControlMarkup(ByVal virtualPath As String) As [String] 
    Dim page As New SacrificialMarkupPage() 
    Dim ctl As UserControl = DirectCast(page.LoadControl(virtualPath), UserControl) 
    page.Controls.Add(ctl) 
    Dim sb As New StringBuilder() 
    Dim writer As New StringWriter(sb) 

    page.Server.Execute(page, writer, True) 
    Return sb.ToString() 
End Function 
Смежные вопросы