как получить доступ к динамически созданному элементу управления HTML из кода в asp.net - PullRequest
1 голос
/ 30 сентября 2011

У меня есть веб-страница, в которой я использую простой цикл foreach и создаю структуру таблицы, в которой я отображаю изображение в формате td. Требуется, чтобы я хотел получить доступ к изображению, созданному в формате td, из кода при загрузке страницы .

но я не могу найти элемент управления, я установил элемент управления как runat = 'server' и также установил идентификатор.

foreach (DataRow r in dtLogic.TopStories(Convert.ToInt32(ConfigurationManager.AppSettings["TopArticles"]), Convert.ToInt32(ConfigurationManager.AppSettings["PortalId"])).Rows)
        {
            i++;
            str.Append("<table cellpadding='0' cellspacing='0' class='newsItem'>");
            str.Append("<tr>");
            str.Append("<td><img runat='server' id='img"+i+"' class='thumb' src='" + GetAppSettingValue("MainSiteUrl") + "" + r["image"].ToString() + "' width='128' height='73'></td>");
            str.Append("<td><p class='newsTitle'><a href='" + r["URL"].ToString() + "'>" + r["title"].ToString() + "</a></p></td>");
            str.Append("<td><img class='arrow' src='/images/arrow.png'></td>");
            str.Append("</tr>");
            str.Append("</table>");
        }

Теперь, когда я получаю доступ к этому изображению из кода, как показано ниже ..

HtmlImage img = (HtmlImage)this.FindControl("img1");

я получаю NullReference для объекта img ..

Может кто-нибудь сказать мне, почему он не получает изображение, которое является runat = 'server' и рендеринг на странице ..

Ответы [ 2 ]

3 голосов
/ 30 сентября 2011

Вы не можете получить к нему доступ, так как он не будет существовать при обратной передаче.Элемент управления изображения не отправляется обратно на сервер.Если вам нужно привязать события к нему (для момента его нажатия), вы обычно хотите создать элемент управления в page_init и повторно привязать его события, чтобы заставить работать динамический элемент управления.

1 голос
/ 30 сентября 2011

Адам Тюльпер на месте.

Либо сохраните значение в скрытом текстовом поле, которое будет отправлено обратно.

или

Способ сделать это - создать элементы управления веб-сервера. (Это намного сложнее)

Image img = new image()....
HtmlTable tabl = new HtmlTable()
HtmlTr ...
HtmlTd ...
td.Controls.Add(img);

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

(Кстати, вы не можете просто добавить runat = 'server' как строку к чему-либо. Проверьте сами. Просмотрите исходный код на своей веб-странице, и вы увидите runat = 'server' в источнике. Любой другой серверный элемент управления не будет иметь атрибут в исходном представлении).

...