ASP.NET: получение разметки для .ascx - PullRequest
1 голос
/ 22 января 2010

Допустим, у меня есть пользовательский элемент управления .ascx. Как получить разметку HTML в строку?

Ответы [ 5 ]

6 голосов
/ 22 января 2010

Как только вы используете метод 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();

Если вы не находитесь внутри контекста страницы, есть другие способы сделать это.

1 голос
/ 22 января 2010

Я не проверил код, но теоретически, если у вас есть ссылка на ваш UserControl, вы сможете вызывать Render ()

StringBuilder sb = new StringBuilder();
using (StringWriter tw = new StringWriter(sb))
using (HtmlTextWriter hw = new HtmlTextWriter(tw))
{
    ctrl.Render(hw);
}
return sb.ToString(); 
0 голосов
/ 22 января 2010

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

    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
0 голосов
/ 22 января 2010

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

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

0 голосов
/ 22 января 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...