Рекурсивно найти элементы управления страницы и добавить атрибуты? - PullRequest
0 голосов
/ 06 апреля 2011

Мне нужна рекурсивная функция, которая найдет все элементы управления на странице и позволит мне добавить атрибуты элемента управления javascript в зависимости от типа элемента управления.

Проблема в том, что у меня есть страница с несколькими панелями, на которых есть элементы управления. Панели могут даже иметь вложенные панели / элементы управления.

К сожалению, следующее не делает то, что я хочу, но я ищу что-то подобное ...

                Action<Control> traverse = null;

                //in a function:
                traverse = (ctrl) =>
                {
                    //ctrl.Enabled = false; //or whatever action you're performing
                    foreach (Control c in ctrl.Controls)
                    {
                        Response.Write(c.GetType().ToString() + " : " + c.ID.ToString() + "<br />");

                        if (c.GetType() == typeof(TextBox))
                        {
                            ((TextBox)(c)).Attributes["onKeypress"] = "javascript:return FormEdited();";
                        }
                        else if (c.GetType() == typeof(DropDownList))
                        {
                            ((DropDownList)(c)).Attributes["onchange"] = "javascript:return FormEdited();";
                        }
                        else if (c.GetType() == typeof(CheckBox))
                        {
                            ((CheckBox)(c)).Attributes["onClick"] = "javascript:return FormEdited();";
                        }

                    }

                    traverse = (ctrl2) => ctrl.Controls.GetEnumerator();
                };

1 Ответ

2 голосов
/ 06 апреля 2011

Это должно работать:

public void traverse(Control ctl)
{
    foreach (Control c in ctl.Controls) 
    {
        System.Diagnostics.Debug.WriteLine(c.GetType().ToString());
        //Response.Write(c.GetType().ToString() + " : " + c.ID.ToString() + "<br />"); 
        if (c.GetType() == typeof(TextBox)) 
        { ((TextBox)(c)).Attributes["onKeypress"] = "javascript:return FormEdited();"; 
        } 
        if (c.GetType() == typeof(DropDownList)) 
        { ((DropDownList)(c)).Attributes["onchange"] = "javascript:return FormEdited();"; 
        } 
        else if (c.GetType() == typeof(CheckBox)) 
        { ((CheckBox)(c)).Attributes["onClick"] = "javascript:return FormEdited();"; 
        }
        traverse(c);
    }
}

и затем вызовите его с помощью:

traverse(this.Page);

т.е.

protected void Page_Load(object sender, EventArgs e)
{
   traverse(this.Page);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...