ASP.NET 是不是有更好的方法来查找其他控件中的控件?

Posted

技术标签:

【中文标题】ASP.NET 是不是有更好的方法来查找其他控件中的控件?【英文标题】:ASP.NET Is there a better way to find controls that are within other controls?ASP.NET 是否有更好的方法来查找其他控件中的控件? 【发布时间】:2010-12-31 12:57:20 【问题描述】:

我目前在 ascx 控件中有一个下拉菜单。我需要从同一页面上另一个 ascx 后面的代码中“找到”它。它的值用作 ascx #2 上的 ObjectDataSource 的参数。我目前正在使用这段丑陋的代码。它有效,但我意识到如果控制命令发生变化或其他各种事情,它不会是我所期望的。有人对我应该如何正确执行此操作有任何建议吗?

if(Page is ClaimBase)

  var p = Page as ClaimBase;
  var controls = p.Controls[0].Controls[3].Controls[2].Controls[7].Controls[0];
  var ddl = controls.FindControl("ddCovCert") as DropDownList;

谢谢,新年快乐!! ~ck 在圣地亚哥

【问题讨论】:

【参考方案1】:

通常,当您需要查找大量控件时,我会实现“FindInPage”或递归 FindControl 函数,您只需将控件传递给它,然后它会递归地下降控件树。

如果这只是一次性的事情,请考虑在 API 中公开您需要的控件,以便您可以直接访问它。

public static Control DeepFindControl(Control c, string id)

   if (c.ID == id)
    
     return c;
   
   if (c.HasControls)
   
      Control temp;
      foreach (var subcontrol in c.Controls)
      
          temp = DeepFindControl(subcontrol, id);
          if (temp != null)
          
              return temp; 
          
      
   
   return null;

【讨论】:

甜蜜。我经常使用它,而且效果很好。一个简单的解决方案。【参考方案2】:

在用户控件类上公开一个属性,该属性将返回您需要的值。让页面访问该属性。

只有用户控件应该知道里面有什么控件。

【讨论】:

以上是关于ASP.NET 是不是有更好的方法来查找其他控件中的控件?的主要内容,如果未能解决你的问题,请参考以下文章

ASP .NET单页上的多个用户控件 - 回发问题

在 ASP.NET 中查找使用特定接口的控件

ASP.NET一个页面多个Button按钮事件避免数据验证控件RequiredFieldValidator冲突方法

如何将 CSS 应用于 ASP.NET CheckBoxList 控件的内部元素

ASP.NET 在嵌套在更新面板中的用户控件中注入 javascript

有没有更好的方法来管理 100 个 aspx 页面?