ASP.NET:获取标记为的.ascx(ASP.NET: Getting markup for .a

2019-10-19 05:18发布

比方说,我有一个一个的.ascx用户控件。 我如何获得它的HTML标记为一个字符串?

Answer 1:

一旦您使用LoadControl()方法得到它变成一个页面,你可以可以通过调用它的渲染()方法得到的HTML。 它需要的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();

如果你的页面上下文中却没有,还有其他的方法来做到这一点。



Answer 2:

我没有验证的代码,但在理论上,如果你有你的用户控件的引用,你应该能够调用渲染()

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


Answer 3:

你不解释一下你的“得到它的HTML”的意思。

如果你是在谈论一个web客户端,然后拿到标记的方法是发送一个HTTP GET的URL。



Answer 4:

一般不用于创建一个用户控件的HTML直到该用户控件的Render()方法被调用。 该方法生成的HTML和将内容发送到所述的HtmlTextWriter。

退房UserControl.Render()文档获取更多信息。



Answer 5:

试试这个,就像一个冠军来自用户的控制抓住生成的标记

    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


文章来源: ASP.NET: Getting markup for .ascx