3

这是我的示例代码:

    <script type="text/javascript">
    $(function () {
        $('body')
            .append('<form id="form1"></form>'); //append a new form element with id mySearch to <body>
        $('#form1')
            .attr("runat", "server")
            .append('<asp:Button runat="server" ID="btn1"/>');
    });
    </script>

这就是我的身体标签的样子:

    <body>

    </body>

我收到此错误:

Control 'btn1' of type 'Button' must be placed inside a form tag with runat=server.

提前致谢!:)

更新:我试图省略

    .append('<asp:Button runat="server" ID="btn1"/>');

当我运行萤火虫时,我得到了这个:

   <body>
        <form id="form1" runat="server"></form>
   </body>

它确实有一个 runat="server"。为什么我不能把我的 asp:Button 放在里面?o_O

4

2 回答 2

4

您更新的问题仍然是错误的方法。你不能这样做:

$('#form1').attr("runat", "server")

并期望它的工作方式与您键入以下内容相同:

<form runat="server">

因为上面的标签是在服务器端处理的,实际上在客户端呈现如下:

<form method="post" action="default.aspx" id="ctl00">

这看起来不像你正在做的事情。

你有两个选择:

  1. 停止尝试使用 Javascript添加任何 ASP.NET 控件(即以 开头<asp:)或其中包含的任何内容。runat="server"如果您确实必须使用 Javascript 来执行此操作,请使用常规 HTML 控件。

  2. 停止使用 Javascript 并实际正确使用<asp:控件或 HTML 控件,runat="server"然后从后面的代码中执行您需要执行的操作。

现在是切线。

关于Control 'btn1' of type 'Button' must be placed inside a form tag with runat=server.假设您正确使用<form runat="server">并重试的错误。你可能会发现它(有点)有效!

<form id="form1" runat="server">
    <asp:Button ID="btn2" Text="Button 2" runat="server" />
    <script>
        $(document).ready(function () {
            $('#<%= form1.ClientID %>').append('<asp:Button Text="Button 1" ID="btn1" runat="server"/>');
        });
    </script>
</form>

呈现,但它是不正确的。除了令人困惑、讨厌的代码之外,它之所以有效,是因为 ASP.NET 实际上为此呈现 HTML<asp:Button并将其放入脚本块中,所以发送给客户端的是这个(和两个按钮......但仍然不是你输入的内容) .

<input type="submit" name="btn2" value="Button 2" id="btn2" />
<script>
    $(document).ready(function () {
        $('#form1').append('<input type="submit" name="btn1" value="Button 1" id="btn1" />');
    });
</script>

现在是你没想到的部分。从代码隐藏中,您可以在页面加载上执行此操作:

protected void Page_Load(object sender, EventArgs e)
{
    btn1.Text = "This is Awful";
}

而不是在屏幕上显示Button 2和的两个按钮,Button 1现在第二个按钮显示This is Awful

...但同样,这是完全错误的,<asp:如果您尝试这样做,大多数其他控件都会中断(我不确定为什么 ASP.NET 会转换 Javascript 块中的代码)。因此,请参阅上面的两个选项,了解如何继续。

于 2013-01-24T03:41:14.310 回答
1

首先这部分代码没有按照你的预期运行

.append('<asp:Button runat="server" ID="btn1"/>');

runat="server"必须在设计页面时添加该控件的工作,或者在服务器端以编程方式添加,由服务器后面的代码编译并创建一个 html 部分。

当您在客户端使用javascript添加它时,服务器对此一无所知并且无法运行它,请编译它。

现在在第一部分中,您尝试form再次在客户端的页面内添加一个新的

$('body')
            .append('<form id="form1"></form>'); 
        $('#form1')

这是 webform 上的一个问题,因为 asp.net 必须只包含一个表单元素。在 asp.net 已准备好呈现的一个表单中,您需要添加其他按钮,而不是创建第二个。

要继续,您需要在页面上定义一个表单标签(不是使用 javascript)。如果您想添加回发输入按钮,您可以这样做,但必须将它们放在现有表单中,不创建新的,并且不使用 runat=server。然后手动处理该回发代码 - 这意味着您不会调用任何特定函数,您只需阅读回发变量。

于 2013-01-24T02:21:50.840 回答