0

メソッドに渡すときにPage.Controls、その名前またはその他の簡単な方法で特定のコントロールにアクセスする方法はありますか? ControlCollection次のように繰り返すのではなく、http://msdn.microsoft.com/en-us/library/yt340bh4.aspx ?

編集:申し訳ありませんが、もっと明確にする必要があります。データベース作業 (フォーム データの挿入など) を実行するクラスのインスタンスがあります。.aspx ページの分離コードから、Page.Controlsそのクラス インスタンスのメソッドに渡します。メソッドはこれを として受け取りますControlCollection。そのメソッド内には のようなメソッドはありませんPage.FindControl。ただし、このコレクションを反復処理できます。しかし、より速い方法はありますか?

4

4 に答える 4

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 に答える
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 に答える