2009-12-31 67 views
1

我目前在ascx控件中有一个下拉菜单。我需要从另一个位于同一页面的ascx后面的代码中“查找”它。它的值被用作ascx#2上ObjectDataSource的参数。我目前正在使用这段丑陋的代码。它有效,但我意识到如果控制秩序改变或其他各种事情,它不会在我期待的地方。有没有人有任何建议我应该如何正确地做到这一点?ASP.NET有没有更好的方法来找到其他控件内的控件?

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在圣地亚哥

回答

6

一般来说,当你有很多控件需要做的时候,我会实现一个“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; 
} 
+0

甜。我用这很多,它工作得很好。简单的解决方案。 – Hcabnettek 2010-01-26 21:09:59

6

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

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

相关问题