我有一个 ASP.NET 站点,我试图通过它们的 ID 从 C# 代码隐藏文件中访问 div 元素。本质上,我想查看是否存在 div 元素,如果存在,则更改其属性。
我发现许多资源指向十几种不同的解决方案,但它们似乎都不起作用。
ASP.Net 页面上的 HTML:
<div class="contentArea">
<div class="block" id="button1" runat="server">
Some Content Here
</div>
<div class="block" id="button2" runat="server">
Some Content Here
</div>
<div class="block" id="button3" runat="server">
Some Content Here
</div>
</div>
C# 代码背后(我试过的例子):
System.Web.UI.HtmlControls.HtmlGenericControl div1 = (System.Web.UI.HtmlControls.HtmlGenericControl)this.FindControl("button1");
div1.Attributes["class"] = "classNameHere";
或者
Control div1 = this.FindControl("button1");
div1.GetType();
当代码到达上述每个示例的第二行时,我收到一个错误:
你调用的对象是空的。
如果我尝试以下操作:
if (div1 != null)
{
// Do Something;
}
什么都没有发生,因为 div1 始终设置为 null。具有讽刺意味的是,如果我查看 Locals 窗口并检查它,我可以在列表中看到 button# id,所以我知道它们在那里,但系统的行为就像它没有找到控件一样。
我的最终目标是找到按钮 div 的最大 id #(查看我的 html 示例,最大 id 为 3(button3)。也许有更好的方法来解决它,但无论哪种方式,一旦我有了我的max id,我希望能够触摸每个 div 并更改一些 css 属性。
虽然我可以通过 jQuery 轻松完成所有这些工作,但在这种情况下,我需要在 C# 中完成这些工作。
任何帮助深表感谢。如果您需要更多信息,请告诉我。
更新 我从头开始创建了一个新的 C# web 项目。添加母版页(而不是更改它)并使用母版页添加网络表单后,我只在 Content ID="Content2" 下的网络表单中添加了一行:
<div id="button1"></div>
从后面的 c# 代码中,我仍然遇到与以前相同的问题。
最终更新和答案 我很震惊没有人(包括我自己)从上述更新中发现我的错误。当我在 div 下从头开始创建新项目时,我从来没有放 runat="server" 。以下是我从头开始在新项目下解决问题的方法:
将 runat="server" 添加到 div:
<div id="button1" runat="server"></div>
然后我在 MasterPage 下的 ContentPlaceHolder 上做了一个 FindControl:
ContentPlaceHolder myPlaceHolder = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1");
注意:这是默认创建的 Site.Master 页面上 ContentPlaceHolder 代码的样子:
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
在后面的代码中找到这个 ContentPlaceHolder 后,我在这个占位符中搜索了 button1:
using System.Web.UI.HtmlControls;
HtmlControl myControl = (HtmlControl)myPlaceHolder.FindControl("button1");
最后我检查一下 myControl 是否为空:
if (myControl != null)
{
\\ Do Something
}
当我运行这段代码时,它找到了我正在寻找的 div。这是所有放在一起的完整代码:
using System.Web.UI.HtmlControls;
ContentPlaceHolder myPlaceHolder = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1");
HtmlControl myControl = (HtmlControl)myPlaceHolder.FindControl("button1");
if (myControl != null)
{
// Do Something
}