Список всех панелей обновления ClientID на странице веб-формы - PullRequest
1 голос
/ 23 июля 2010

Кто-нибудь знает способ считывания в списке всех идентификаторов клиента UpdatePanel, которые есть на странице? По сути, мне нужно перебрать все элементы управления на странице с типом UpdatePanel и отобразить ClientID для каждого ..

У меня есть четыре панели обновления на этой странице, и я использую это

        private string LoopUpdatePanel(ControlCollection controlCollection)
    {
        StringBuilder sb = new StringBuilder();
        foreach (Control control in controlCollection)
        {
            if (control is UpdatePanel)
            {
                sb.Append(((UpdatePanel)control).ClientID + ", ");
            }

            if (control.Controls != null)
            {
                LoopUpdatePanel(control.Controls);
            }
        }
        return sb.ToString();
    }

Возвращает пустую строку ??

Ответы [ 4 ]

2 голосов
/ 23 июля 2010

Не уверен, какой язык вы используете или что вы пробовали ... Пожалуйста, дайте нам код, чтобы мы знали, что вы пробовали, может быть, мы поймем ошибку.

но в качестве примера вот как вы можете перебирать элементы управления.Просто используйте нужные вам свойства вместо текста (в вашем случае значение Id и панель обновления).Я считаю, что важной частью получения контроля является прохождение всей иерархии контроля, чтобы вы не пропустили ни одного ребенка, внука и т. Д.

    private void Page_Load(object sender, System.EventArgs e)
{
    LoopTextboxes(Page.Controls);
}

private void LoopTextboxes(ControlCollection controlCollection)
{
    foreach(Control control in controlCollection)
    {
        if(control is TextBox)
        {
            ((TextBox)control).Text = "I am a textbox";
        }

        if(control.Controls != null)
        {
            LoopTextboxes(control.Controls);
        }
    }
}
0 голосов
/ 31 декабря 2012
if (_contrl is UpdatePanel)
{

UpdatePanel _cntrl = (UpdatePanel)_contrl;

foreach (Control ctr in _cntrl.ContentTemplateContainer.Controls)
{

if (ctr is TextBox)
{

 // Do Work Here 

}
}

}
0 голосов
/ 26 июля 2010

Это элемент управления, который содержит содержимое главной страницы. Я думаю, что он может быть новым для c # 4.0. Просто проигнорируйте его и используйте внутренний цикл.Просто пройдите все имеющиеся у вас элементы управления и распечатайте все это.

Кроме того, метод, который вы подняли, не возвращает значения правильно, вы называете метод без возвращаемых значений, не подпись, а когда вы вызываете метод, такой как LoopUpdatePanel (control.Controls);

0 голосов
/ 23 июля 2010

Звучит как правильная логика, может быть, вы ищете другой набор элементов управления?

Вы пытались пройти через отладку и проверить идентификаторы?


 protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            string result = "result = ";

            foreach (Control tmpControl in Page.Controls)
            {
                Type tmpType = tmpControl.GetType();

                if (tmpControl is SiteMaster)
                {
                    foreach (Control SiteMasterControlItem in tmpControl.Controls)
                    {
                        if (SiteMasterControlItem is System.Web.UI.HtmlControls.HtmlForm)
                        {
                            int i = 0;

                            for( i =0;i < SiteMasterControlItem.Controls.Count; i++)
                            {
                                Type tmpType2 = SiteMasterControlItem.Controls[i].GetType();
                            }
                        }


                    }
                }
            }

            Response.Write(result);
        }

        catch(Exception ex)
        {
            Response.Write("error = " + ex.StackTrace);
        }
    }

Последний цикл содержит держатель содержимого. Возможно, вам придется идти глубже. Это было проверено на VS2010 с c # 4.0

НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...