我问了how to render a UserControl's HTML并获得用于动态生成的 UserControl 的代码。
现在我正在尝试使用 LoadControl 加载以前生成的控件并吐出它的 HTML,但它给了我这个:
“TextBox”类型的控件必须放置在带有 runat=server 的表单标记内。
我实际上并没有将控件添加到页面,我只是想获取它的 HTML。有什么想法吗?
这是我正在玩的一些代码:
TextWriter myTextWriter = new StringWriter();
HtmlTextWriter myWriter = new HtmlTextWriter(myTextWriter);
UserControl myControl = (UserControl)LoadControl("newUserControl.ascx");
myControl.RenderControl(myWriter);
return myTextWriter.ToString();
最佳答案
或者,您可以在将控件呈现为字符串的页面上禁用 ServerForm/Event-validation。
以下示例说明了如何执行此操作。
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string rawHtml = RenderUserControlToString();
}
private string RenderUserControlToString()
{
UserControl myControl = (UserControl)LoadControl("WebUserControl1.ascx");
using (TextWriter myTextWriter = new StringWriter())
using (HtmlTextWriter myWriter = new HtmlTextWriter(myTextWriter))
{
myControl.RenderControl(myWriter);
return myTextWriter.ToString();
}
}
public override void VerifyRenderingInServerForm(Control control)
{ /* Do nothing */ }
public override bool EnableEventValidation
{
get { return false; }
set { /* Do nothing */}
}
}
关于c# - UserControl 的 RenderControl 要求在 (C# .NET) 中使用表单标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/334382/