2011-10-19 69 views
0

在我的sharepoint Web部件應用程序中。我如下動態生成LinkBut​​tons。這工作得很好onClick動態生成的LinkBut​​ton

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); 
} 

然而,當我點擊UI中的鏈接之一,我調試器從來沒有碰到被設置在

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是通過點擊美國的圖像地圖來調用。

+0

可能有很多原因,需要更多的代碼,最可能的原因可能是AutoEventWireup =「false」,或linkBut​​tons上缺少runat =「Server」。 – CjCoax

+0

我添加了以下代碼,但仍不喜歡它:-( – socialMatrix

+0

linkBut​​ton.Attributes.Add(「runat」,「server」); linkBut​​ton.Attributes.Add(「AutoEventWireup」,「true」); linkBut​​ton。 Attributes.Add(「AutoPostBack」,「true」); linkBut​​ton.Click + = new EventHandler(linkBut​​ton_Click); – socialMatrix

回答

1

您可能不會在每次回發時重新創建動態生成的鏈接。

如果你有一個if (!IsPostback)環繞着你的foreach,請嘗試刪除它。

+0

我沒有if(!IsPostback)包裹我的foreach :-( – socialMatrix

+0

你能發佈更多的代碼嗎?如果我將你的代碼直接複製到我的項目中,那很好我重現它的唯一方法是,如果我不重新創建回發上的鏈接 – fehays

+0

在原始問題 – socialMatrix

1

我在這裏同樣的問題....

我創建一個HtmlTable觸發一個事件... 此表有(n)的HtmlTableRow S(在事件處理程序計算)
現在每個之後行包含從生成的代碼後面2 LinkButton秒。後一個事件被處理... 並且每個LinkButton被分配一個新的事件處理程序:

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

其中lnkbtnEdit_Click的簽名如下:
protected void lnkbtnEdit_Click(object sender, EventArgs e)

奇怪的是的..有一個回發時,我點擊生成LinkButton ...但事件並沒有射擊......

我不確切地知道問題是什麼......但我找到了解決方法:..
它看起來好像這些生成的控件在回發消失(試圖分配一個id和使用Page.FindControl()女巫返回null!)
所以我不得不重新鏈接按鈕....在Page_Load我重新生成LinkBut​​tons,具有相同的ID ...並將它們鏈接到它們各自的EventHandler s

相關問題