1

Page_Loadメソッドでは、さまざまな条件に基づいて、いくつかのコントロールを作成します。これらのコントロールにサーバー側のコードを登録したいと思います。ただし、最後の部分では、コントロールをサーバーコントロールとして宣言する必要があります。これは通常runat=serverによって行われますが、C#コードでこの属性を設定する方法がわかりません。myControl.Attributes.Add( "runat"、 "server")はこのトリックを実行しません。これは機能します。つまり、クリックすると「test」メソッドが呼び出されます。

<asp:LinkButton ID="LinkButton1" runat="server" OnClick="test">testtext</asp:LinkButton>

これは機能しません:

            LinkButton lb = new LinkButton();
            lb.ID = "LinkButton1";
            lb.OnClientClick = "test";
            lb.Text = "testtext";
            lb.Attributes.Add("runat", "server");

それをクリックするとページが読み込まれますが、test-methodが呼び出されません。

ヒントはありますか?

4

4 に答える 4

3

ほとんど正解です。ほんのいくつかのこと:

  • サーバー コントロールを手動でインスタンス化する場合、runat="server"属性を追加する必要はありません。これは、サーバー コントロールを他のマークアップと区別するために ASP.NET ページ パーサーによってのみ使用される特別な属性です。
  • マークアップのOnClick属性は、オペレーターClickを使用して接続するサーバー側イベントに対応します。+=(一方、OnClientClickマークアップの属性は、通常、JavaScript コードのスニペットを含むonclick クライアント側のOnClick属性に対応します。対応していないという事実onclickは、確かに少し紛らわしいです。)

したがって:

LinkButton lb = new LinkButton();
lb.ID = "LinkButton1";
lb.Click += test;
lb.Text = "testtext";

privateそして、あなたのイベントハンドラー (マークアップからの参照がない場合でも作成できます):

protected void test(object sender, EventArgs e)
{
}
于 2012-07-05T03:04:13.277 に答える
2

サーバー側のイベントを登録しようとしていますか? もしそうなら、あなたはこのようにすることができます。

LinkButton lb = new LinkButton();
lb.ID = "LinkButton1";
lb.Click += new EventHandler(LinkButton1_Click);
lb.Text = "testtext";

イベント

protected void LinkButton1_Click(object sender, EventArgs e)
{ 

}
于 2012-07-05T03:11:55.913 に答える
0

その必要はありません。コントロールは C# コードを介してサーバー側で作成されるため、既にサーバー側のコントロールになっています。発生している問題は、ページのライフ サイクルに関係しています。現在行っているようにサーバー側でコントロールを作成する場合、ポストバックごとにコントロールを再追加し、処理するイベント ハンドラーを再フックする必要があります。彼らのために。

また、コードが 2 つの異なるものを示していることにも注意してください。投稿したマークアップでは、OnClickイベントのハンドラーを表示していますが、C# コードでは、OnClientClickイベントのハンドラーを追加しています。それらは2つの異なるものです。このOnClientClickイベントは、コントロールがクリックされたときに、ページにある JavaScript コードを起動するだけです。これを行うのとまったく同じです:

 link.Attributes.Add("onclick","SomeJavascriptFunction();");
于 2012-07-05T02:48:49.820 に答える
0

lb.Attributes.Add("runat", "server")まず、その行は必要ありません。行うrunat="server"ことは、コントロールをコード ビハインドから見えるようにすることだけです。コード ビハインドにコントロールを追加しているので、それは議論の余地があります。

OnClickスクリプトに関しては、動作するものは usingであり、壊れたものは using であることに注意してくださいOnClientClickOnClickは javascript によってネイティブに理解され、その名前の関数を見つけて実行するため、この違いは重要ですtest

OnClientClick一方、ASP.NET ランタイムがクリック イベントに手動でバインドする任意の JavaScript です。つまり、実行するだけtestです。それは何もありません。test()一方、適切な JavaScript です。

したがって、その行を次のように変更しますlb.OnClickClick = "test()";

編集:私は自分自身を混同しました。他の答えを見てください。

于 2012-07-05T02:50:53.933 に答える