Перечислите все панели обновления ClientID на странице веб-формы

Кто-либо знает о способе считать в списке весь Клиентский идентификатор 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();
    }

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

1
задан leen3o 24 July 2010 в 09:45
поделиться

3 ответа

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

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

    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);
        }
    }
}
2
ответ дан 2 September 2019 в 22:48
поделиться

Похоже на правильную логику, возможно, вы перебираете другой набор элементов управления?

Пробовали ли вы пройтись с помощью отладки и проверить идентификаторы?


 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);
        }
    }

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

HTH

0
ответ дан 2 September 2019 в 22:48
поделиться

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

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

0
ответ дан 2 September 2019 в 22:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: