为 ASP.net 子控件生成 HTML“名称”属性,而不是唯一的“ID”属性

2023-12-12

为我的自定义 ASP.net 服务器控件生成的 HTML 代码生成子控件的 name 属性,而不是 id 属性。像这样的东西:

<span id="GridView2_ctl02_editdis">
    <input type="text" name="GridView2$ctl02$editdis$ctl00"/>
</span>

自定义控件本身的 ID 显然是正确的。

对我来说更奇怪的是 ID 确实是生成的有时(我不知道在什么条件下)。但一个FindControl()使用该 ID 在服务器端返回 null。FindControl()与 name 属性的值一起工作就很好。

像这样的东西:

<span class="TextBox" id="GridView2_ctl02_editdis">
    <input type="text" id="GridView2_ctl02_editdis_ctl00" name="GridView2$ctl02$editdis$ctl00"/>
</span>

对于上述情况,FindControl("GridView2$ctl02$editdis$ctl00")工作正常,FindControl("GridView2_ctl02_editdis_ctl00")没有。

如何确保 ID 一致且可预测?


他们是一致的。

在内部,作为命名控件(即 GridView)的子控件的完整 ID 是通过使用“$”附加其父控件的 ID 来构建的。如果是网格,则为 gridID$rowID$cellID$mycontrolID。这是区分同一子控件(即 mycontrolID)的多个实例所必需的。为什么是“$”而不是“_”?我想是因为很多人已经倾向于将他们的控件命名为“my_control_something”,并且“$”符号与任何符号一样好。

因此,GridView2$ctl02$editdis$ctl00 是正确的 ID,这就是为什么它被用作 INPUT 等控件的名称。当发生回发时,框架需要能够将表​​单键与适当的控件相匹配。

我认为,ID 的混淆来自于这样一个事实:您在 .aspx 中使用的 ID 和您在 HTML 中看到的 ID 是两个不同的东西。客户端 ID 就是这样。无论出于何种原因,当呈现控件时(使用 ClientID 属性),所有“$”都会被“_”替换。我的猜测是这样做是为了使其对 javascript/css 友好。

现在,关于 FindControl("GridView2$ctl02$editdis$ctl00")... 您确实应该尽可能避免它。 FindControl 是一个递归函数,它将“GridView2$ctl02$editdis$ctl00”分解为“GridView2”和“ctl02$editdis$ctl00”,找到 GridView2 并询问它是否有“ctl02$editdis$ctl00”作为子控件。对以 $ 分隔的每个部分重复该过程。

附带说明一下,每当您发现自己为某些深埋的控件调用 Page.FindControl 时,您都需要检查该模式并询问原因。例如,无论需要使用“GridView2$ctl02$editdis$ctl00”做什么,很可能也需要使用“GridView2$ctl02$editdis$ctl01”来完成。在这种情况下,可能需要在 OnItemCreated 或 OnItemDataBound 上处理,您可以在其中访问“了解”“ctl00”的行。

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

为 ASP.net 子控件生成 HTML“名称”属性,而不是唯一的“ID”属性 的相关文章

  • UpdatePanel 破坏 JQuery 脚本

    这是我想做的事情的简化版本 基本上我有一个数据列表 里面有很多东西 当你将鼠标悬停在数据列表中的项目上时 我希望 jquery 隐藏 显示东西 问题是 在我进行数据绑定后 如果 gridview repeater datalist 位于更新
  • 哈希密码如何解密? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我在我的网站中使用盐技术的 SHA1 算法对密码进行哈希处理 有什么办法可以解密密码并恢复原来的密码吗 Hashing不加密 解密 当我们
  • 作出选择之后、提交上传之前的 asp.net FileUpload 事件

    我想显示通过 FileUpload 控件的浏览按钮选择的文件的大小 理想情况下 该值在用户选择文件后但在单击 上传文件 按钮之前立即显示 我有一个网络表格 按钮看起来像这样
  • 如何让 webpack 和 iis express 协同工作?

    I have Angular 2 和 Webpack 2 入门 https github com qdouble angular webpack2 starter它通过 webpack dev server 在节点上运行 我如何使用 web
  • 使用“dnupublish”排除发布项目上的文件夹

    如何使用 dnupublish 命令从 wwwroot 中排除文件夹 示例 在我的项目中存在许多文件夹 我需要排除wwwroot lib and wwwroot 源 我正在使用 clr 1 0 0 beta7 12302 The wwwro
  • 如何分配Profile值?

    我不知道我缺少什么 但我在 Web config 文件中添加了 Profile 属性 但无法访问 Profile Item在代码中或创建一个新的配置文件 我今天也遇到了同样的问题 学到了很多东西 Visual Studio 中有两种项目 网
  • 共享 Owin Cookie 身份验证和基于旧版表单身份验证 cookie

    在我们公司 我们拥有大量使用 Asp net Web Forms 4 0 构建的应用程序 这些应用程序使用表单身份验证作为单点登录身份验证 配置如下
  • 这段代码有什么问题。如果用户选择或不选择复选框,为什么它仍然显示 MsgBox? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 无论我是否选择复选框 它仍然会给出
  • ASP.net获取硬件信息

    如果我创建一个 ASP net 页面 我是否能够获取当前用户的 CPUID 和 BIOS 序列号 还是出于安全原因不允许这样做 我目前有一个获取这些值的 Visual Basic net 应用程序 我只是想知道是否可以在网页上执行相同的操作
  • Kendo 刷新 (DropDownList.refresh()) 不起作用错误未定义

    我试图在另一个 DropDownList 更改后刷新下拉列表 但 Refresh 方法未定义错误正在升级 我尝试再次读取数据源 它显示它正在加载 但数据仍然相同 帮助解决这个问题请 Code DropDownList1 change fun
  • 将文件写入 Web 服务器 - ASP.NET

    我只想将 TextBox 控件的内容写入 Web 服务器目录根目录中的文件 如何指定它 请记住 我正在本地测试这个 它不断地将文件写入我的程序文件 Visual Studio Common IDE目录而不是我的项目目录 这是我假设Web服务
  • .NET ServiceModel.Syndicate - 更改 RSS 源的编码

    我正在尝试解决我在以下位置生成的所有 RSS 源的错误http captainobvio us http captainobvio us在 Internet Explorer 版本 8 和 9 中产生以下错误 进给代码错误 从当前切换 编码
  • 当客户端连接到“localhost”上的服务时,为什么 System.Net.ServicePoint.ConnectionLimit 使用“7FFFFFFF”(Int32.MaxValue/2147483647)?

    为什么使用 System Net ServicePoint ConnectionLimit 7FFFFFFF Int32 MaxValue 2147483647 当客户端连接到服务时 本地主机 而如果服务在远程计算机上运行 它决定使用 2
  • Page.AsyncTimeout - 无休止的超时?

    I saw 一个例子 http www webreference com programming javascript rg30 index html of forever iframe实现 彗星模拟 所以我决定测试它 但添加了异步方法 这
  • 通过 CultureInfo 格式化字符串

    我想显示英镑符号和格式 0 00 即 45 00 4 10 我正在使用以下语句 td style text align center td 但它不起作用 问题是什么 谁能帮我 Use the Currency http msdn micro
  • ASP.NET MVC - 更新生产中的预编译 Razor View 文件

    我想知道以下是否可能 通过在 Visual Studio 中打开项目设置 使用我们的 MVC 应用程序预编译 Razor 视图 将应用程序部署到生产环境 然后在稍后阶段 通过覆盖生产中现有的 cshtml 文件来更新视图 而无需回收应用程序
  • OpenXML - 保护所有工作表

    我只能保护一张工作表 但是当我尝试保护 Excel 文档中的所有工作表时 我在尝试附加 SheetProtection 时收到错误 如果我理解正确 我必须在 SheetData 之后附加 SheetProtection 这是我的代码 She
  • 回发 Asp.Net 上的动态用户控件

    我创建了一个项目 user control 它有一个文本框 按钮等 它将有意收集用户想要的项目总数 我在 page load 上动态创建了几个 user control 实例 如果您单击项目数量的添加按钮 它将添加到会话变量中 但是 当用户
  • ASP.NET 网站上的 XSS 攻击 [已关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我遇到了很大的麻烦 请帮忙 我的网站
  • DbContext.SaveChangesAsync 异常处理

    当搭建新的脚手架时ApiController通过 Visual Studio 2013 中的异步操作和实体框架支持 某些方法可以包装DbContext SaveChangesAsync https msdn microsoft com en

随机推荐