0

当我传递Page.Controls给一个方法时,有没有办法通过其名称或任何其他快速方式来访问特定控件?与遍历ControlCollection类似的相反:http: //msdn.microsoft.com/en-us/library/yt340bh4.aspx

编辑:对不起,我应该更清楚。我有一个执行数据库工作(例如插入表单数据)的类的实例。从 .aspx 页面的代码隐藏中,我将传递Page.Controls给该类实例的方法。该方法将其接收为ControlCollection. 在那个方法里面没有这样的方法Page.FindControl。但是,我可以迭代这个集合。但是有更快的方法吗?

4

4 回答 4

0

试试这个以找到特定的控件Page

Control control = Page.FindControl["ControlId"]

在此之后,您可以像cast这样控制您的原始版本control

TextBox textbox=(TextBox)control; 

如果你想从 ControlCollection 中找到特定的控件,那么你可以Linq像这样使用(我以TextBox这个为例)

Control myControl = myControlCollection.OfType<TextBox>().Where(a => a.ID == "controlId").FirstOrDefault();
于 2013-03-21T20:01:58.660 回答
0
Page.FindControl("lblControl")
于 2013-03-21T20:02:36.690 回答
0

根据您想要找到的控件类型,您可以执行以下操作:

Control ctrl = FindControl("TextBox1");
于 2013-03-21T20:02:39.837 回答
0

如果控件处于“同一级别”,则 Page.FindControl 方法是可以的,但通常情况下,控件隐藏在其他控件中。不幸的是,您可能需要递归搜索给定页面中的所有控件。这是我用来通过给定 id 值查找控件的一段代码...

string g_Error = string.Empty;
List<Control> _infos = new List<Control>();
_infos = ProcessControls(_infos, Page, "info_");
...
    public List<Control> ProcessControls(List<Control> MatchControls, Control controls, string FieldKey)
    {
        try
        {
            //get a recusive listing of all existing controls for reference
            foreach (Control cControl in controls.Controls)
            {
                if (cControl.Controls.Count > 0)
                {
                    //recusive call
                    MatchControls = ProcessControls(MatchControls, cControl, FieldKey);
                }
                //field rules
                //must contain Fieldkey to be collected (i.e. control id = FirstName where the FieldKey is "Name")
                //so first, loop through and collect controls with FieldKey
                if (cControl != null)
                {
                    if (cControl.ClientID.Contains(FieldKey))
                    {
                        MatchControls.Add(cControl);
                    }
                }
            }
        }
        catch (Exception ex)
        {
            g_Error = ex.ToString();
        }
        return MatchControls;
    }
于 2013-03-21T20:24:03.333 回答