比方说,我有一个一个的.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