2011-09-29 37 views
1

我有一个网页,其中我使用一个简单的foreach循环和创建表结构,其中我在td中显示图像,要求是我想要在页面加载时从代码隐藏中访问在td中创建的图像。如何访问动态创建的HTML控制从后面的代码在asp.net

但我无法找到控制,我做了控制runat ='服务器',也设置了ID。

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

我得到了IMG对象NullReference ..

谁能告诉我,为什么它没有得到图像,这是runat ='服务器',并在页面上呈现..

+0

假设你最终写出str的内容......你不是在这里动态创建任何控件,而是写出一个字符串。如果您在该页面上查看源代码,它看起来就像那样。

回答

3

您无法访问它,因为它不会在回发中存在。图像控件不会回发到服务器。如果你必须绑定事件(当它被点击时),你通常需要在page_init中创建控件并重新绑定它的事件以使动态控件起作用。

1

Adam Tuliper是现货。

将值存储在隐藏文本框中,并将其返回。

做到这一点的一种方法是创建一个使用Web服务器控件。 (这是非常困难的工作)

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

然后,他们必须恢复viewstete之前创建的,所以重新在被覆盖的OnLoad事件这些控件。你可以在runat ='server'作为字符串添加任何东西,检查你自己,在你的网页上查看源代码,你会在源代码中看到runat ='server',任何其他服务器控件都不会在视图源中有属性)。

相关问题