2

私はc#で動的リンクボタンを生成しています。それらのいずれかをクリックすると、クリックされたリンクボタンを表示する他の関数が呼び出されます。しかし、リンクボタンをクリックしても呼び出されません。

これが私がそれを生成している方法です。

 Int32 i; //create a integer variable
 for (i = 1; i <= 10; i++) // will generate 10 LinkButton
 {
LinkButton lb = new LinkButton(); //create instance of LinkButton
lb.Text = Convert.ToString(i) + ""; //LinkButton Text
lb.ID = Convert.ToString(i); // LinkButton ID’s
lb.CommandArgument = Convert.ToString(i); // LinkButton CommandArgument
lb.CommandName = Convert.ToString(i); // LinkButton CommanName
lb.OnClientClick+= new CommandEventHandler(lb_Command); //Create Handler for it.
//type lb.Command += and press double time Tab Key it will generat the lb_Command() code
 PlaceHolder1.Controls.Add(lb); // Adding the LinkButton in PlaceHolder
 }

これは機能コードです。

void  lb_Command(object sender, CommandEventArgs e)
{
Label1.Text = e.CommandName; // will display the which Linkbutton clicked
Label1.Text = "aaaa";
//  Response.Redirect(“LnkBtn.aspx?val=” + Label1.Text); // you can also use as QueryString to send values to another page
}

助けてください。

ありがとう。

4

5 に答える 5

3

間違ったイベントを使用しています:

ClientClick は、javascript でトリガーされる単なるクライアント側イベントです。

必要なのはクリックイベントです

[...]

lb.Click += new CommandEventHandler(lb_Command); //Create Handler for it.

それでもイベントをキャッチできない場合は、ページ ライフサイクルの間違ったタイミングで LinkBut​​ton を動的に宣言している可能性があります (Eoin Campbell のコメントと回答で言及されています)。

彼は、この件に関して非常に優れた記事へのリンクを示しています。それを読んで、イベントを把握していない理由を理解してください。

質問とさまざまな回答に対するコメントから判断すると、Page_Load 関数でボタンを宣言しています。Page_Load はページのライフサイクルの後半に発生するため、これは機能しません。

私が理解していることから、今あなたは持っています:

void Page_Load(object sender, EventArgs e)
{
    if(!Page.IsPostBack)
    {
          Int32 i; //create a integer variable
          for (i = 1; i <= 10; i++) // will generate 10 LinkButton
          {
              LinkButton lb = new LinkButton(); //create instance of LinkButton
              lb.Text = Convert.ToString(i) + ""; //LinkButton Text
              lb.ID = Convert.ToString(i); // LinkButton ID’s
              lb.CommandArgument = Convert.ToString(i); // LinkButton CommandArgument
              lb.CommandName = Convert.ToString(i); // LinkButton CommanName
              lb.OnClientClick+= new CommandEventHandler(lb_Command); //Create Handler for it.
              PlaceHolder1.Controls.Add(lb); // Adding the LinkButton in PlaceHolder
        }
    }
}

あなたはそれを取り除く必要があります。代わりに、次を使用します。

void Page_Init(object sender, EventArgs e)
{
    Int32 i; //create a integer variable
    for (i = 1; i <= 10; i++) // will generate 10 LinkButton
    {
         LinkButton lb = new LinkButton(); //create instance of LinkButton
         lb.Text = Convert.ToString(i) + ""; //LinkButton Text
         lb.ID = Convert.ToString(i); // LinkButton ID’s
         lb.CommandArgument = Convert.ToString(i); // LinkButton CommandArgument
         lb.CommandName = Convert.ToString(i); // LinkButton CommanName
         lb.OnClientClick+= new CommandEventHandler(lb_Command); //Create Handler for it.
         PlaceHolder1.Controls.Add(lb); // Adding the LinkButton in PlaceHolder
    }
}

その理由については、上記のリンク先の記事で説明しています。理解するのは難しい概念ですが、非常に重要な概念です。

于 2012-09-06T13:01:39.273 に答える
2

クライアント側とサーバー側のコードが混在しています。OnClientClick は、クライアント側コードをアタッチするためのメソッドです。lb_Command はサーバー側で実行されます。

代わりにクリックを使用してください。

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.button.onclientclick.aspxhttp://msdn.microsoft.com/en-us/library/system.web. ui.webcontrols.button.click.aspx

于 2012-09-06T13:00:32.750 に答える
1

Ok。2つのこと。他の人が指摘したように、LinkButton CommandまたはClickハンドラーを使用する必要があります。

しかし、2 番目の問題は、コントロールのみを生成しようとすることで、ページのライフ サイクルの問題が発生していることです。

  1. if(!ポストバック)
  2. Page_Load

これを読んでください: これは、.net 1 http://www.4guysfromrolla.com/articles/092904-1.aspxにさかのぼる、このテーマに関する非常に優れた記事です 。

一言で言えば、(最初の投稿時だけでなく) 毎回コントロールを作成する必要があり+=、ページのライフサイクルの早い段階でイベント ハンドラー (パーツ) を接続して、その時点までにイベントが接続されるようにする必要があります。 PageLifeCycle はそれらをトリガーしようとします。

ページのOnInitメソッドをオーバーライドし、if(!Postback)チェックなしでコードをそこに移動します

于 2012-09-06T13:24:26.730 に答える
0

以下のコードの代わりに

lb.OnClientClick+= new CommandEventHandler(lb_Command); //Create Handler for it. 

以下を使用します

lb.Command+= new CommandEventHandler(lb_Command); //Create Handler for it. 

これが完全なコードです。それは私の最後で実行されています。

    protected void Page_Load(object sender, EventArgs e)
    {
        Int32 i; //create a integer variable 
        for (i = 1; i <= 10; i++) // will generate 10 LinkButton 
        {
            LinkButton lb = new LinkButton(); //create instance of LinkButton 
            lb.Text = Convert.ToString(i) + "&nbsp;"; //LinkButton Text 
            lb.ID = Convert.ToString(i); // LinkButton ID’s 
            lb.CommandArgument = Convert.ToString(i); // LinkButton CommandArgument 
            lb.CommandName = Convert.ToString(i); // LinkButton CommanName 
            //lb.Click += lb_Click; //Create Handler for it.
            lb.Command += lb_Command;
            //type lb.Command += and press double time Tab Key it will generat the lb_Command() code 
            form1.Controls.Add(lb); // Adding the LinkButton in PlaceHolder 
        } 

    }

    void lb_Command(object sender, CommandEventArgs e)
    {
        Label1.Text = e.CommandName; // will display the which Linkbutton clicked             
    }

ありがとう。

于 2012-09-06T13:16:56.997 に答える
-1

リンク ボタンが Button クラスから継承している場合は、OnClick イベントにアタッチする必要があります。?

http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.buttonbase.click(v=vs.100 )

また

http://msdn.microsoft.com/en-us/library/system.windows.forms.control.onclick.aspx

于 2012-09-06T13:02:10.440 に答える