C# - 在 div id 上使用 FindControl 时出错

2024-01-07

我有一个 ASP.NET 站点,我试图通过 C# 代码隐藏文件中的 ID 访问 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";

or

Control div1 = this.FindControl("button1");
div1.GetType();

当代码到达上述每个示例的第二行时,我收到错误:

你调用的对象是空的。

如果我尝试以下操作:

if (div1 != null)
{
    // Do Something;
}

什么也没有发生,因为 div1 始终设置为 null。具有讽刺意味的是,如果我查看“本地”窗口并检查它,我可以在列表中看到按钮# id,所以我知道它们在那里,但系统的行为就像没有找到控件一样。

我的最终目标是找到按钮 div 的最大 id #(查看我的 html 示例,最大 id 为 3 (button3)。也许有更好的方法来解决这个问题,但无论哪种方式,一旦我有了我的max id,我希望能够触摸每个 div 并更改一些 css 属性。

尽管我可以通过 jQuery 轻松完成所有这些操作,但在本例中我需要使用 C# 来完成这些操作。

任何帮助深表感谢。如果您需要更多信息,请告诉我。

UPDATE我从头开始创建了一个新的 C# Web 项目。添加母版页(并且不更改它)并使用母版页添加 Web 表单后,我只在 Content ID="Content2" 下的 Web 表单中添加了一行:

<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
}

如果您的页面使用 MasterPage,则 div 控件将不会位于主控件集合中。该集合仅包含指向母版页的 ContentPlaceholder 的内容控件。

有以下三种选择:

  1. Use FindControl在内容控件上:contentControl.FindControl("button1");
  2. 做一个递归FindControl直到找到您需要的控件
  3. 通常,div 控件的声明会添加到 Designer.cs 代码隐藏中,因此您可以通过其名称直接访问该控件:button1.Attributes["class"] = "classNameHere";

Update

我创建了一个母版页,向其中添加了一个内容页,并添加了<div id="button1" runat="server">Some text</div>到内容页面。

在我的内容页面的代码隐藏中,我添加了以下代码:

protected void Page_Load(object sender, EventArgs e)
{
    var control = FindHtmlControlByIdInControl(this, "button1");

    if (control != null)
    {
        control.Attributes["class"] = "someCssClass";
    }
}

private HtmlControl FindHtmlControlByIdInControl(Control control, string id)
{
    foreach (Control childControl in control.Controls)
    {
        if (childControl.ID != null && childControl.ID.Equals(id, StringComparison.OrdinalIgnoreCase) && childControl is HtmlControl)
        {
            return (HtmlControl)childControl;
        }

        if (childControl.HasControls())
        {
            HtmlControl result = FindHtmlControlByIdInControl(childControl, id);
            if (result != null) return result;
        }
    }

    return null;
}

这对我有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# - 在 div id 上使用 FindControl 时出错 的相关文章

  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • C# 异步等待澄清?

    我读了here http blog stephencleary com 2012 02 async and await html that 等待检查等待的看看它是否有already完全的 如果 可等待已经完成 那么该方法将继续 运行 同步
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 为什么 GCC 不允许我创建“内联静态 std::stringstream”?

    我将直接前往 MCVE include
  • 传递给函数时多维数组的指针类型是什么? [复制]

    这个问题在这里已经有答案了 我在大学课堂上学习了 C 语言和指针 除了多维数组和指针之间的相似性之外 我认为我已经很好地掌握了这个概念 我认为由于所有数组 甚至多维 都存储在连续内存中 因此您可以安全地将其转换为int 假设给定的数组是in
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • 如何实例化 ODataQueryOptions

    我有一个工作 简化 ODataController用下面的方法 public class MyTypeController ODataController HttpGet EnableQuery ODataRoute myTypes pub
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • DotNetZip:如何提取文件,但忽略zip文件中的路径?

    尝试将文件提取到给定文件夹 忽略 zip 文件中的路径 但似乎没有办法 考虑到其中实现的所有其他好东西 这似乎是一个相当基本的要求 我缺少什么 代码是 using Ionic Zip ZipFile zf Ionic Zip ZipFile
  • 如何确定 CultureInfo 实例是否支持拉丁字符

    是否可以确定是否CultureInfo http msdn microsoft com en us library system globalization cultureinfo aspx我正在使用的实例是否基于拉丁字符集 我相信你可以使

随机推荐

  • Angular:类型错误:无法读取 null 的属性“firstCreatePass”

    将 Angular 更新到版本 10 后 我看到此控制台错误 错误类型错误 无法读取 null 的属性 firstCreatePass 更新之前是不存在的 当使用自定义组件加载视图时会显示它 可能缺少什么 原来是因为我也更新了 ngx cu
  • 在 iPhone X 模拟器的顶部和底部看到黑条

    在 iPhone X 模拟器 GM Seed 中运行我的应用程序时 我注意到两个奇怪的效果 该应用程序不使用全屏空间 顶部和底部区域为黑色 标题栏下方有一个奇怪的白条 有谁知道这里发生了什么以及如何解决这个问题 我在 Interface B
  • 检查 T-SQL 中字符串的起始字符是否按字母顺序排列

    是否可以仅使用 TSQL 检查 varchar 字段的前两个字符是否按字母顺序排列 我需要选择my table只有具有的行my field以两个字母字符开头 我怎样才能实现这个目标 是否可以使用正则表达式 你不需要使用正则表达式 LIKE足
  • 为什么reactjs中的功能组件没有实例?

    In 反应快速入门 https facebook github io react docs refs and the dom html 有关于Refs and Functional Components that 您不能在功能组件上使用 r
  • HTTP 标头值的最大值?

    HTTP 标头是否有可接受的最大允许大小 如果是这样 那是什么 如果不是 这是特定于服务器的内容还是允许任何大小的标头的公认标准 不 HTTP 没有定义任何限制 然而 大多数网络服务器确实限制它们接受的标头的大小 例如在Apache 默认限
  • CSS/HTML:使文本斜体的正确方法是什么?

    是什么correct使文本斜体的方法 我见过以下四种方法 i Italic Text i em Italic Text em span class italic Italic Text span span class footnote It
  • (在Video.js中)如何设置自定义请求标头?

    遇到这个问题后 我根据以下内容编写了一个最小的示例本文档 https github com videojs http streaming hlsxhr
  • 向 Django 管理站点添加忘记密码功能

    如何将忘记密码功能添加到 Django 管理站点 有电子邮件 安全问题选项吗 有可用的插件 扩展吗 它们都是在 django 中构建的 只需添加相关的 url 模式即可 如下 from django contrib auth import
  • 使用 $ 运算符将两个括号链接在一起

    我有这个功能 min max 10 20 max 30 40 我可以将其重写为 min max 10 20 max 30 40 但是还有没有办法解决最后的括号呢 并不是说这还不够好 但我只是不能放弃这个想法 必须有某种方法可以做到这一点 如
  • 休眠序列不存在

    我尝试使用 spring 在我的项目中将 hibernate 从 4 升级到 54 2版本 升级后 当我调用更新方法时 我在堆栈跟踪中发现以下错误 10 53 32 185 ERROR TableStructure 149 could no
  • 在 WebView 中启用长按

    在浏览器中 您可以长按 URL 在我的 WebView 中 你不能 我怎样才能做到你也能做到 我也有同样的问题 不幸的是 我找不到一种方法来显示标准浏览器菜单选项 您必须自己实现每一项 我所做的是将 WebView 注册为上下文菜单acti
  • 通过 ingress 服务从 kubernetes pod 发送 http 请求到 Minikube 中的另一个 pod

    我在 Oracle VM Virtualbox 中使用 Minikube 单节点 Kubernetes 集群 节点中的一个 Pod 是基于 Next js 的客户端 其余 Pod 是不同的微服务 假设我的客户端 Pod1 需要在渲染之前向身
  • Firebase 数据库规则语法错误

    rules Users user id Grants write access to the owner of this user account whose uid must exactly match the key user id w
  • 如何自动生成创建或修改的时间戳字段?

    我的实体类 Entity Table name user public class User implements Serializable private static final long serialVersionUID 1L Id
  • Unity DI 从特定程序集自动注册

    我正在尝试使用 Unity Registration by Convention 功能 我不知道如何从特定的程序集 项目文件中注册以 Repository 结尾的文件 container RegisterTypes AllClasses F
  • 制作 python 程序发牌时遇到的麻烦。

    我想做一个纸牌游戏 我所坚持的是发牌 我所做的就是对每张卡制定一个指令 并赋予它一个值 因为有些卡比其他卡更有价值 我的想法是将字典分成4部分 或者将每本字典复印4份 然后从每份中删除39张卡片 每人留下13张卡片 这是否可能 或者我是否以
  • std unique_ptrs 的 stl 集合的 boost 序列化

    我希望能够序列化 std unique ptrs 的 stl 容器 能做到吗 顺便说一句 单个 std unique ptr 一切正常 下面是我正在处理的代码 gcc 给出以下错误 use of deleted function std u
  • JavaScript 运算符“in”

    我已经习惯了 python 所以 a 1 2 3 1 in a gt True b 1 2 3 x x in b gt True 为什么在 JavaScript 中会这样 a 1 2 3 1 in a gt true b 1 2 3 x x
  • 使用 ksoap2-android SOAP 客户端从 WSDL 生成 Java 以在 Android 上使用?

    我必须从 Android 应用程序访问现有的 SOAP Web 服务 我已获得一些描述 Web 服务的 WSDL 文件 读一些SO的其他答案 https stackoverflow com questions 297586 how to c
  • C# - 在 div id 上使用 FindControl 时出错

    我有一个 ASP NET 站点 我试图通过 C 代码隐藏文件中的 ID 访问 div 元素 本质上我想查看 div 元素是否存在 如果存在 则更改其属性 我发现许多资源都指向十几种不同的解决方案 但似乎没有一个有效 ASP Net 页面上的