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

それはあなたがしていることとはまったく似ていません。

次の 2 つのオプションがあります。

  1. ASP.NET コントロール (つまり で始まるもの<asp:) またはその中の何かrunat="server"を Javascript で追加しようとするのをやめてください。本当に Javascript でこれを行う必要がある場合は、通常の HTML コントロールを使用してください。

  2. <asp:Javascript の使用をやめ、実際にコントロールまたは 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てスクリプト ブロックに配置するためにのみ機能するため、クライアントに送信されるのはこれ (および 2 つのボタン.. しかし、入力したものではない) です。 .

<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";
}

また、画面上に と と表示される 2 つのボタンの代わりに、2 番目のボタンに と表示さButton 2れます。Button 1This is Awful

...しかし、繰り返しますが、これは完全に間違っており<asp:、実行しようとすると他のほとんどのコントロールが機能しなくなります (ASP.NET が Javascript ブロックのコードを変換する理由がまったくわかりません)。そのため、先に進む方法については、上記の 2 つのオプションを参照してください。

于 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')

asp.netにはフォーム要素が1つだけ含まれている必要があるため、これはWebフォームの問題です。asp.netによってすべての準備が整った1つのフォーム内に、2つ目のボタンを作成するのではなく、ボタンを追加する必要があります。

次に進むには、ページにフォームタグを定義する必要があります(javascriptではありません)。ポストバック入力ボタンを追加したい場合は、追加できますが、新しいフォームを作成せずに、runat = serverを使用せずに、既存のフォーム内に配置する必要があります。次に、そのポストバックを手動でコードビハインドで処理します。つまり、特定の関数を呼び出す必要はなく、ポストバック変数を読み取るだけです。

于 2013-01-24T02:21:50.840 に答える