Получите контроль над именем по имени от codebehind - PullRequest
0 голосов
/ 25 января 2012

Хорошо, я хочу получить доступ к элементу управления div по id, который динамически изменяется из кода C #. Может быть, будет понятнее с кодом:

string divHtml = "";
        for (int j = 1; j < 4; j++)
        {
            string ph = "placeHolder" + j;

            Control phd = (Control)FindControl(ph);
            StringWriter sw = new StringWriter();
            HtmlTextWriter w = new HtmlTextWriter(sw);
            phd.RenderControl(w);
            divHtml = divHtml + sw.GetStringBuilder().ToString();
        }

и часть ascx:

<div runat="server" id="placeHolder1" class="placeholder" >                
</div>

Он передает время компиляции, но phd имеет значение нулевое значение , а не значение управления Это работает нормально, если я получаю доступ к управлению напрямую, как это:

StringWriter sw = new StringWriter();
HtmlTextWriter w = new HtmlTextWriter(sw);
placeHolder1.RenderControl(w);
divHtml = divHtml + sw.GetStringBuilder().ToString();

Заранее спасибо ....

Ответы [ 2 ]

1 голос
/ 25 января 2012

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

Посмотрите на ASP.NET Есть ли лучший способ найти элементы управления, которые находятся в других элементах управления? для получения дополнительной информации.

Или, если у вас есть родитель (страница), он должен работать для вызова page.FindControl ("placeHolder1")на этом контроле напрямую.

0 голосов
/ 25 января 2012

Я понял, что это проблема с вложением, благодаря @bang.Но так как я использую главную страницу для отображения своего контента, это лучшее решение для меня:

for (int j = 1; j < 4; j++)
        {
            string ph = "placeHolder" + j;

            ContentPlaceHolder cph = this.Master.FindControl("MainContent") as ContentPlaceHolder;
            Control ctrlPh = cph.FindControl(ph);

            StringWriter sw = new StringWriter();
            HtmlTextWriter w = new HtmlTextWriter(sw);
            ctrlPh.RenderControl(w);
            divHtml = divHtml + sw.GetStringBuilder().ToString();

        }

Спасибо @bang, вы подтолкнули меня в правильном направлении.

...