如何使用javascript在<form>标签中附加<asp:button>等.. </form> </asp:button>

时间:2013-01-24 01:49:34

标签: javascript asp.net html

以下是我的示例代码:

    <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

2 个答案:

答案 0 :(得分: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:正确使用runat="server"控件或HTML控件,然后从后面的代码执行您需要执行的操作。

  3. 现在为切线。

    关于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实际上为那个<asp:Button呈现HTML并将其放在脚本块中,所以发送给客户端的是这个(和两个按钮......但仍然不是你输入的内容。)

    <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>
    

    现在部分你没想到。从代码隐藏中,您可以在Page Load:

    上执行此操作
    protected void Page_Load(object sender, EventArgs e)
    {
        btn1.Text = "This is Awful";
    }
    

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

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

答案 1 :(得分:1)

首先,这部分代码没有按预期运行

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

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

当你在客户端上添加javascript时,服务器不知道任何事情,也无法运行它,nether编译它。

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

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

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

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