2011-09-29 82 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',任何其他服務器控件都不會在視圖源中有屬性)。

相關問題