假设我有一个.ascx用户控件。如何将其HTML标记转换为字符串?
答案 0 :(得分:6)
使用LoadControl()方法将其放入页面后,您可以通过调用其上的Render()方法来获取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();
如果您不在页面上下文中,则可以other ways来执行此操作。
答案 1 :(得分:1)
我还没有验证代码,但理论上如果你有对UserControl的引用,你应该可以调用Render()
StringBuilder sb = new StringBuilder();
using (StringWriter tw = new StringWriter(sb))
using (HtmlTextWriter hw = new HtmlTextWriter(tw))
{
ctrl.Render(hw);
}
return sb.ToString();
答案 2 :(得分:0)
您没有通过“获取HTML”来解释您的意思。
如果您正在谈论Web客户端,那么获取标记的方法是 发送HTTP GET到URL。
答案 3 :(得分:0)
在调用UserControl的Render()方法之前,通常不会创建UserControl的HTML。该方法生成HTML并将内容发送到HtmlTextWriter。
查看有关UserControl.Render()的文档以获取更多信息。
答案 4 :(得分: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