2016-06-20 19 views
0

いくつかのコンテキスト。リピータを生成するクラスMethod1のPage_Loadと、ボタンの配列を生成するMethod2を追加しました。 各ボタンはMethod2内のイベントに動的に接続されます。 ボタンは決して変更されませんが、ボタンをクリックすることに基づいて、繰り返される要素が変更されるはずです。ボタンのプロパティに基づいてボタンをクリックしてページをリロードする

私の主な問題は/です: 1)ボタンをクリックすると、イベントは、特定のイベントに関連付けられたものではなく、デフォルトのリピーターを生成するMethod1を呼び出すページ(Page_Load)をロードしますボタンの配列からボタンxに移動します。 - >そう、私はMethod1を包んだ!isPostBack ...何も起こりません

あなたはこれを避けるでしょうか?これを実現するためにどのような原則を使用しますか?これまでの試み

protected void Page_Load(object sender, EventArgs e) 
      { 
       if(!IsPostBack) 
       { 
        GetItems(1, 2); //default values (first time the page is loaded) 
        GenerateButtons(10); 
       } 
      } 

private void GenerateButtons(int c) 
     { 
      LinkButton[] x = new LinkButton[c]; 

      for(int i=0; i<c;i++) 
      { 
       x[i] = new LinkButton(); 
       x[i].Text = (i+1).ToString(); 
       Panel1.Controls.Add(x[i]); 

       x[i].OnClientClick += new EventHandler(Button_Click); 

      } 
     } 
protected void Button_Click(object sender, EventArgs e) 
     { 
      Button button = (Button)sender; // Which button was clicked; 

      GetItems(int.Parse(button.Text)-1, 3); //3 is a constant; first argument is index of button extracted from its caption 

     } 

//ボタンをクリックすると、押されたボタンに固有のgetItemsを呼び出すページを()をロードする必要があり(最初の引数は、その指標である)とボタンを再生成する必要があり、おそらくいくつかの中で強調表示します以前に押されたものと同じように。 パフォーマンスを向上させるために、ページが最初に読み込まれた後にボタンを再生成しないようにも役立ちます。

私はASP.NETとC#で作業しています。

私の主な問題はButton_Clickが呼び出されないことです。なぜなら、ボタンをクリックしたときにボタンが再生成され、ボタンのイベントを含むその定義が再作成されたからです。

+1

あなたの 'Button_Click'イベントは、いつでも再生成の前に*起動されます。これは問題ではありません。あなたの問題は、*あなたの 'x [i] .OnClientClick + = ...'コードにあるかもしれませんか?見ていないと(そして古典的なASPで長い間練習していない)、OnClientClickイベントではなく、OnClickを接続する必要はありませんか? –

+0

Geoff、フィードバックいただきありがとうございます。残念ながら、私はonClickメソッドを持たないLinkBut​​tonを使用しています。 – Halle

+0

問題ありません。常に助けてみる価値があります。ちょっとしたグーグル(他の検索エンジンが利用可能です)では、私に '.Click'イベントが見つかりましたか?ストローで握られているように思わないでください。場合によっては、デリゲートメソッドを呼び出すための正しいクリックハンドラを取得する必要があります。 –

答えて

0

はあなたのButton_Clickハンドラが常には前に、とにかく再生を、を解雇されるだろう。これは問題ではありません。

あなたの問題は、あなたのx[i].OnClientClick += ...コードにあります。

正しいイベントを聞くにはLinkButton.Clickイベントにフックする必要があります。このよう

private void GenerateButtons(int c) 
{ 
    LinkButton[] x = new LinkButton[c]; 

    for(int i=0; i<c;i++) 
    { 
     x[i] = new LinkButton(); 
     x[i].Text = (i+1).ToString(); 
     Panel1.Controls.Add(x[i]); 

     x[i].Click += new EventHandler(Button_Click); // Use the 'Click' event 

    } 
} 

は、この情報がお役に立てば幸い!

関連する問題