c# - UserControl 的 RenderControl 要求在 (C# .NET) 中使用表单标记

标签 c# html .net user-controls

我问了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/

相关文章:

c# - 像 Uint16[] 一样遍历字节数组

C# - 试图找到剩余的 EventHandler 以防止控制超出范围

javascript - 使导航项与褪色图像分开

javascript - 进入页面后如何使元素滚动到滚动条的中心

c# - 如何在阿拉伯语输入语言模式下将英语固定为特定文本框?

c# - 通过标签加载图片

c# - NUnit 的一次性初始化

php - 使用 PHP 将字符串插入 MySQL 表和 HTML 页面的安全性

.net - 如何生成 WSDL 文件?

.net - nUnit 是否内置了模拟框架,我应该使用它吗?