如何从 asp.net 中的代码隐藏访问动态创建的 HTML 控件

发布于 2024-12-07 04:27:54 字数 1253 浏览 0 评论 0原文

我有一个网页,其中我使用简单的 foreach 循环并创建表结构,其中我在 td 中显示图像,要求是我想从页面加载时的代码隐藏访问在 td 中创建的图像。

但我无法找到该控件,我已将控件设置为 runat='server' 并设置了 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='server' 并在页面上呈现。

i have a webpage, wherein i am using a simple foreach loop and creating table structure, wherein i am displaying an image in td, the requirement is i want to access the image created in td, from code-behind on page load.

but i am unable to find the control, i have made the control as runat='server' and also setted the 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>");
        }

now when i access this image from code behind like below..

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

i gets the NullReference for the img object..

can anyone tell me why its not getting the image, which is runat='server' and rendering on the page..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

风尘浪孓 2024-12-14 04:27:54

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

You can't access it as it won't exist on postback. An image control isn't posted back to the server. If you have to bind events to it (for when its clicked on) you generally want to create the control in page_init and rebind its events to get the dynamic control to work.

顾冷 2024-12-14 04:27:54

亚当·图利珀 (Adam Tuliper) 说得对。

要么将值存储在隐藏的文本框中,然后将其发回。

或者

一种方法是使用 Web 服务器控件进行创建。 (这是一项艰巨的工作)

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

那么对于动态控件,必须在恢复视图之前创建它们,因此在覆盖的 OnLoad 事件中重新创建这些控件。

(顺便说一句,您不能只是将 runat='server' 作为字符串添加到任何内容中。请自行检查。在网页上查看源代码,您将在源代码中看到 runat='server' 。任何其他服务器控件都不会具有该属性查看源代码)。

Adam Tuliper is spot on.

Either store the value in a hidden textbox which gets posted back.

or

A way to do this is create using web server controls. (This is much harder work)

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

THen with dynamic controls, they must be created before viewstete is restored, so recreate these controls in overriden OnLoad event.

(BTW, you cant just add runat='server' as a string to anything. Check for yourself. View source on your webpage and you will see runat='server' in the source. Any other server control will not have the attribute in the view source).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文