2011-10-19 18 views
0

私のsharepoint web-partアプリケーションで。私は以下のようにLinkBut​​tonsを動的に生成しています。これは私がUI内のリンクをクリックしたときに動的に生成されたLinkBut​​tonのonClick

foreach (var pName in productTypesNames[productType]) 
{ 
    var subLi = new HtmlGenericControl("li"); 
    var linkButton = new LinkButton{ Text = pName }; 
    linkButton.Click += new EventHandler(linkButton_Click); 
    subLi.Controls.Add(linkButton); 
    ul.Controls.Add(subLi); 
} 

は、しかし、私のデバッガは

void linkButton_Click(object sender, EventArgs e) 
{ 
} 

より多くのコードの最初の行に設定されたブレークポイントにヒットしません正常に動作します

protected void StateClicked(object sender, CommandEventArgs e) 
{ 
    //Generate a dictionary of type Dictionary<string, List<string>> 
    //Display the dictionary 
    foreach (var productType in productTypesNames.Keys) 
     { 
      var li = new HtmlGenericControl("li"); 
      nav.Controls.Add(li); 
      var ul = new HtmlGenericControl("ul"); 

      var anchor = new HtmlGenericControl("a"); 
      anchor.Attributes.Add("href", "#"); 

      foreach (var pName in productTypesNames[productType]) 
      { 
       var subLi = new HtmlGenericControl("li"); 
       var linkButton = new LinkButton{ Text = pName }; 
       linkButton.Click += new EventHandler(linkButton_Click); 
       subLi.Controls.Add(linkButton); 
       ul.Controls.Add(subLi); 
      } 
      anchor.InnerHtml = productType; 
      li.Controls.Add(anchor); 
      li.Controls.Add(ul); 
     } 
} 

ここで、stateClickedはUSAのイメージマップをクリックして呼び出されます。

+0

これにはいくつかの理由がありますが、より多くのコードが必要です。最も可能性の高い理由は、autoEventWireup = "false"またはlinkBut​​tonsのrunat = "Server"がないことです。 – CjCoax

+0

私は、次のコードを追加し、まだそれは:-( – socialMatrix

+0

linkBut​​ton.Attributes.Add( "ラナ"、 "サーバ")好きではありません。 linkBut​​ton.Attributes.Add( "AutoEventWireup属性"、 "真"); のLinkBut​​ton。 linkBut​​ton.Click + =新しいEventHandler(linkBut​​ton_Click); – socialMatrix

答えて

1

おそらく、すべてのポストバックで動的に生成されたリンクを再作成しているわけではありません。

if (!IsPostback)がforeachを囲んでいる場合は、削除してください。

+0

私のforeachの周りにラップされたif(!IsPostback)はありません:-( – socialMatrix

+0

もっとコードを投稿できますか?コードを自分のプロジェクトに直接コピーしても問題ありません。私がそれを再現する唯一の方法は、私がポストバックにリンクを再作成しない場合です。 – fehays

+0

オリジナルの質問にコードを追加しました – socialMatrix

1

私は このテーブルは、(イベントハンドラで計算)(N)HtmlTableRowの今、各
を持っている...私はイベントを発射した後HtmlTableを作成していた....ここ

を同じ問題を抱えていました行は、イベントが処理された後... ..背後にあるコードから生成される2つのLinkButton Sを含ん 各LinkButton、新しいイベントハンドラが割り当てられる:

lnkbtnEdit.CommandArgument = b.BookID.ToString();
lnkbtnEdit.Click += new EventHandler(lnkbtnEdit_Click);

を次のように210シグネチャは次のとおりです。
protected void lnkbtnEdit_Click(object sender, EventArgs e)

奇妙なことは、その..ですが、私は、生成LinkButtonをクリックしてポストバックがある...しかし、イベントが発射されなかった...

私はしないでください問題だった正確に何を知っている...しかし、私は解決策が見つかりました:..
生成されたこれらのコントロールは、ポストバックに消えるかのように見えるが、(IDを割り当てようとしましたし、nullを返さPage.FindControl()魔女を使用!!)
ので、私は、ボタンを再リンクする必要がありました.... Page_Loadで同じIDを持つLinkBut​​tonsを再生成し、それぞれのEventHandlers

関連する問題