2010-07-23 52 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 

} 
} 

} 
相关问题