2010-07-23 38 views
1

任何人都知道一種方式來讀取列表中的所有UpdatePanel客戶端ID我在頁面上?基本上我需要遍歷一個類型的UpdatePanel的頁面中的所有控件,並顯示每個ClientID的..列出所有更新面板在Webform頁面中的ClientID頁面

我有這個頁面在四個更新面板,我用這

 private string LoopUpdatePanel(ControlCollection controlCollection) 
    { 
     StringBuilder sb = new StringBuilder(); 
     foreach (Control control in controlCollection) 
     { 
      if (control is UpdatePanel) 
      { 
       sb.Append(((UpdatePanel)control).ClientID + ", "); 
      } 

      if (control.Controls != null) 
      { 
       LoopUpdatePanel(control.Controls); 
      } 
     } 
     return sb.ToString(); 
    } 

它返回一個空字符串?

回答

0

聽起來像一個正確的邏輯,也許你可能正在通過一組不同的控制?

您是否嘗試過使用調試並檢查ID?


protected void Page_Load(object sender, EventArgs e) 
    { 
     try 
     { 
      string result = "result = "; 

      foreach (Control tmpControl in Page.Controls) 
      { 
       Type tmpType = tmpControl.GetType(); 

       if (tmpControl is SiteMaster) 
       { 
        foreach (Control SiteMasterControlItem in tmpControl.Controls) 
        { 
         if (SiteMasterControlItem is System.Web.UI.HtmlControls.HtmlForm) 
         { 
          int i = 0; 

          for(i =0;i < SiteMasterControlItem.Controls.Count; i++) 
          { 
           Type tmpType2 = SiteMasterControlItem.Controls[i].GetType(); 
          } 
         } 


        } 
       } 
      } 

      Response.Write(result); 
     } 

     catch(Exception ex) 
     { 
      Response.Write("error = " + ex.StackTrace); 
     } 
    } 

最後一個循環包含contentplace持有人。你可能需要更深入。 這是試圖在VS2010用C#4.0

HTH

+0

是的,它似乎沒有找到任何UpdatePanels?見上面 – leen3o 2010-07-24 10:49:25

+0

我無法弄懂代碼來理解'SiteMaster'是什麼?我得到紅色下劃線... – leen3o 2010-07-25 17:17:19

+0

如果您沒有母版頁,請跳過該位。 – rlee923 2010-07-26 02:04:19

2

不知道你使用的是什麼語言,或者你已經試過什麼?請給我們一些代碼,所以我們知道你已經嘗試過什麼,也許我們會發現錯誤。

但作爲一個例子,您將如何循環控制。只需使用你想要的屬性而不是文本(在你的情況下,Id值和更新面板)。我相信,收購控制的重要組成部分,是要經過整個控制層級,這樣你就不會錯過任何子女,孫子女等

private void Page_Load(object sender, System.EventArgs e) 
{ 
    LoopTextboxes(Page.Controls); 
} 

private void LoopTextboxes(ControlCollection controlCollection) 
{ 
    foreach(Control control in controlCollection) 
    { 
     if(control is TextBox) 
     { 
      ((TextBox)control).Text = "I am a textbox"; 
     } 

     if(control.Controls != null) 
     { 
      LoopTextboxes(control.Controls); 
     } 
    } 
} 
+1

我已經添加了基於你的代碼,它仍然返回一個空字符串 - 我已經在Debug中運行,並且它從來沒有找到類型爲UpdatePanel的控件?即使頁面上有四個! – leen3o 2010-07-24 09:47:12

0

它是一個包含母版頁內容的控制,我認爲 可能是新的C#4.0 只是忽略它,並使用內部循環。 只需通過您目前所有的控制並全部打印出來。

此外,你在那裏得到的方法沒有正確返回值,你被稱爲沒有返回值的方法,而不是簽名,但是當你調用像LoopUpdatePanel(control.Controls)這樣的方法時;

0
if (_contrl is UpdatePanel) 
{ 

UpdatePanel _cntrl = (UpdatePanel)_contrl; 

foreach (Control ctr in _cntrl.ContentTemplateContainer.Controls) 
{ 

if (ctr is TextBox) 
{ 

// Do Work Here 

} 
} 

} 
相關問題