asp.net runat =“server”c#name在当前上下文中不存在

时间:2015-05-13 09:33:29

标签: c# asp.net

我的页面上有以下asp.net div设置:

<div runat="server" id="ImageContainer">
     <a href="<%# String.Format("/news/?Article={0}", Eval("ID")) %>"><img src="images/<%# Eval("Image") %>" class="ArticleImage"/></a>
</div>

我知道这是在服务器上创建的,就像我在开发人员工具中查看它的ID一样:

ctl00_body_ArticleInfoRepeater_ctl00_ImageContainer

由服务器创建。

我现在想通过执行以下操作在某些条件下编辑Css:

ImageContainer.CssClass = "invisibleClass";

我的问题是,在C#代码中我收到以下错误:

名称'Image container'在其当前上下文中不存在。

我不知道为什么会这样,因为它显然确实存在。

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

您是否使用了一些数据绑定控件,如GridView,Repeater或其他? 语法<%#....%>表示数据绑定,如果它放在某个数据绑定控件中,则可以正常工作。

在这种情况下,您无法访问&#34; ImageContainer&#34;直接控制。您必须搜索父控件。 既然你还没有提到什么是&#34; ImageContainer&#34;的父控件呢?很难在这里给出代码示例...虽然这里有example如何在 GridView中完成

如果您还没有使用DataBindingControl,那么我建议您检查yourpage.aspx.designer.cs,您应该能够在那里找到控制名称!

希望这会有所帮助。

答案 1 :(得分:1)

那是因为你试图引用一个动态创建的对象(在转发器中很明显)。首先,您不应该为运行时创建的动态对象设置ID。 ID必须是唯一的,否则您将遇到问题。

其次,您需要获取父对象(可能是转发器本身或容器?),然后遍历子控件集合以找到您之后的对象。关于如何在asp.net webforms中找到控件有很多答案,所以只需谷歌一段时间,我确定你会得到代码。

例如find control

答案 2 :(得分:1)

放置在数据列表,转发器,网格视图上的控件不会像放置在页面上的其他服务器控件一样直接访问。如果你想通过后面的代码访问它,你可以在转发器控件的数据绑定或Item_command事件上访问它,因为这些控件本身就作为放置在它们上的其他控件的容器。

你可以使用

   e.Items.findControl("controlID") to access a particular row controls.

我建议你研究这两个中继器控制事件。

如果你想用名称imagecontainer更改所有div的类,你可以使用javascript或jquery来做几行代码。