0

このページは、リンクボタンとそのメソッドで構成されています。

protected void LinkButton_Click(Object sender, EventArgs e)
  {
        TableRow tr = new TableRow();
        TableCell tc = new TableCell();
        Button b = new Button(); 
        b.Text = "x";
        b.CommandArgument = "someargument";
        b.Click +=new EventHandler(this.b_Click);
        tc.Controls.Add(b);
        tc.Width = 30;
        tr.Controls.Add(tc);
        Table.Rows.Add(tr);
  }

そして方法:

  protected void b_Click(object sender, EventArgs e)
    {
        ScriptManager.RegisterStartupScript(UpdatePanel1, this.GetType(), "UpdateCom",      "alert('ok');return false;", true);
        string id = (sender as Button).CommandArgument;
        // other operations...

    }

最初にリンクボタンをクリックしてテーブル内にボタンを作成し、次にボタンをクリックするとb_Clickメソッドが機能しません。代わりに、ページの更新が行われているだけで、JavaScriptアラートが表示されません。

問題は何ですか?

pageLoadメソッドのLinkBut​​tonClick内で操作を行うと、すべてがOKで、ボタンが作成され、このボタンをクリックしたときにb_clickも機能することに注意してください。

4

1 に答える 1

1

ボタンのクリック時にテーブルを動的に構築する必要があるのはなぜですか? ページのロードでビルドして非表示にできますか。ボタンをクリックすると表示されます - クライアント側またはサーバー側で表示できます。

つまり、クライアント側でも保持します-asp.netで気に入らないのは、ポストバックが多すぎることです。文字通り、フォームとビューステートなどのデータを隠しフィールドに投稿し、ページ全体を再レンダリングしています。私には効率が悪いと思われます.Webサーバーは、ページ要求を処理するなどの他のことを行っており、このUX処理をクライアントのブラウザーに任せている可能性があります.

<table id="testTable" style="display: none">
  <tr>
     <td width="30px">
        <input id="b" name="b" type="button" value="someargument" text="Click Me!" onclick='alert(this.value);document.getElementById("testTable").style.display="none";' />
     </td>
  </tr>
</table>

リンクボタンにこの属性を追加できます。

onclientclick='document.getElementById("testTable").style.display="inline";' /> // notice I used the single quote on the outside of the onclick.  This would display the table..

popup2 ボタンでサーバー側の操作を行う必要がある場合は、runat="server" を追加し、onclick を onclientclick... に変更します。

asp.net Webフォームを使用してからしばらく経ちましたので、うまくいくかどうか教えてください....

于 2012-09-27T01:36:01.750 に答える