Asp.net 类型为[…]的控件[…]必须放置在runat=server的表单标记中,但已被删除

Asp.net 类型为[…]的控件[…]必须放置在runat=server的表单标记中,但已被删除,asp.net,Asp.net,ASP.Net说,ASP:Button需要在 之后是否将按钮添加到页面?还有,如果你有 如果不为按钮指定ID,则将为它们提供一个ID 以ctl02的形式自动生成 试试这个 <!DOCTYPE html> <html> <head> <title>Test Case</title> </head> <body> <asp:Placeholder runa

ASP.Net说,
ASP:Button
需要在

之后是否将按钮添加到页面?还有,如果你有
如果不为按钮指定ID,则将为它们提供一个ID
以ctl02的形式自动生成

试试这个

<!DOCTYPE html>
<html>
    <head>
        <title>Test Case</title>
    </head>
    <body>
        <asp:Placeholder runat="server" ID="ph"/>
        <form ID="frm1" runat="server">
            <asp:Button ID="bt1" runat="server" text="FOOBAR"/>
        </form>
    </body>
</html>

测试用例
看起来(根据您发布的代码)错误是由于在
页面加载
方法中添加了另一个按钮造成的。将其添加到占位符
ph
的控件集合,该占位符不在
表单
标记内

尝试将
占位符
标记放置在
表单
标记内:

<body>
  <form ID="frm1" runat="server">
    <asp:Placeholder runat="server" ID="ph" />
    <asp:Button runat="server" text="FOOBAR" />
</body>

假设您使用的是扩展名为.ascx的webUsercontrol,并且您创建了一个扩展名为.aspx的webform,您希望在其中使用它来在线测试或运行.ascx模块。通过将.acsx模块从解决方案资源管理器拖动到.aspx设计页面,确保将.ascx文件放置在水平框中。水平框为您创建一个默认表单。现在运行.aspx文件,假设您已经将其设置为起始页


多谢各位

您将通过编程方式将按钮添加到占位符标记中,但不在表单标记中。也就是说,您添加的表单和按钮都将是占位符标记的子项,并且是彼此的兄弟项。这并不能回答问题,但有助于调试。
<!DOCTYPE html>
<html>
    <head>
        <title>Test Case</title>
    </head>
    <body>
        <asp:Placeholder runat="server" ID="ph"/>
        <form ID="frm1" runat="server">
            <asp:Button ID="bt1" runat="server" text="FOOBAR"/>
        </form>
    </body>
</html>
<body>
  <form ID="frm1" runat="server">
    <asp:Placeholder runat="server" ID="ph" />
    <asp:Button runat="server" text="FOOBAR" />
</body>