关于服务器自动生成的UniqueID问题

神清如梦 2017-02-27 10:22:04
两个用户控件 a.ascx 和 b.ascx
加载a.ascx时候 页面服务器控件生成的控件html 类似于

<input name="a$Text1" type="text" id="a_Text1" />

加载b.ascx时候 页面服务器控件生成的控件html 类似于

<input name="b.ascx$Text1" type="text" id="b.ascx_Text1" />


这是为什么?
...全文
275 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
一个控件的上层“容器控件”,其实就是其 NamingContainer 返回的。通常不过只有几层而已。例如只有2层。 从调试断点,从一个控件开始,可以看到 NamingContainer 返回的 Control 到底是什么类型的控件,(转为对应强类型的控件之后查看)有些什么样的属性,其 ID 属性值是什么,ClientID和 UniqueID 值是什么。然后再向上查看 NaminContainer 的 NaminContainer 控件。 既然是上一层出问题,那么就要到先搞明白上一层容器控件,然后到与上层容器相关的代码中去查找 bug。
神清如梦 2017-02-28
  • 打赏
  • 举报
回复
引用 7 楼 shingoscar 的回复:
[quote=引用 6 楼 dragonsq1009 的回复:] $("#b.ascx_text1") 这样根据解析规则 “.”被认为是样式
$("#b\\.ascx_text1")[/quote] 好吧 这个算是个解决思路 只是没弄明白生成原理 每次JQuery调用一个服务器控件的ID或者Name 都要加点东西 也是麻烦
  • 打赏
  • 举报
回复
引用 6 楼 dragonsq1009 的回复:
按道理说呢生成唯一性是是没问题的 但是呢现在 JQuery用不了了.......... 比如 $("#b.ascx_text1") 这样根据解析规则 “.”被认为是样式 所以才纳闷为什么同样都是自定义用户插件页面,怎么自动生成ID规则是不同的 想找到原理 避免下让它生成带后缀.ascx的标识
你可以在输出页面之前,测试(调试)一下,看看 Text1 的容器控件的 ID 属性是什么,验证一下 Text1 的 ClientID 和 UniqueID 属性值。如果都跟这里的现象一致,说明着走的是常规的 asp.net 命名规范,那么你就进一步研究一下容器控件的 ID 为什么会有“点”,哪里给它设置的 ID 属性设置错误了。这就按照 asp.net 思路来查原因。 如果不一致,那么这可能就是你采用了某些asp.net 框架程序(例如 FineUI 之类的),它们不走 asp.net 寻常路线,另外有一套自己的修改 ID 的想法。 正常来说,asp.net 在此绝不会有“点”。一定是你的代码或者第三方代码搞上去的。
Poopaye 2017-02-28
  • 打赏
  • 举报
回复
引用 6 楼 dragonsq1009 的回复:
$("#b.ascx_text1") 这样根据解析规则 “.”被认为是样式
$("#b\\.ascx_text1")
神清如梦 2017-02-28
  • 打赏
  • 举报
回复
引用 5 楼 sp1234 的回复:
名字产生的规则,是根据容器控件的 ID 来层叠的。 例如一个 ID 为 x1234控件,它放在一个ID 为 adkq389493 的 的容器控件里边,那么它产生的就是 adkq389493$x1234 和 adkq389493_x1234。 其实不管产生什么,只要唯一就可以,并没有什么区别。
按道理说呢生成唯一性是是没问题的 但是呢现在 JQuery用不了了.......... 比如 $("#b.ascx_text1") 这样根据解析规则 “.”被认为是样式 所以才纳闷为什么同样都是自定义用户插件页面,怎么自动生成ID规则是不同的 想找到原理 避免下让它生成带后缀.ascx的标识
  • 打赏
  • 举报
回复
名字产生的规则,是根据容器控件的 ID 来层叠的。 例如一个 ID 为 x1234控件,它放在一个ID 为 adkq389493 的 的容器控件里边,那么它产生的就是 adkq389493$x1234 和 adkq389493_x1234。 其实不管产生什么,只要唯一就可以,并没有什么区别。
神清如梦 2017-02-28
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
为了页面上的标记唯一。
亲,你没理解我问的问题 我是说两个页面 都是text1 一个生成了 id=a_text1 name=a$text1 而另一个生成了 id=b.ascx_text1 name=b.ascx$text1 为什么两个生成的不同?为什么一个后面会把.ascx的后缀带上了
  • 打赏
  • 举报
回复
为了页面上的标记唯一。
神清如梦 2017-02-27
  • 打赏
  • 举报
回复
@孟子E章 求助斑竹
神清如梦 2017-02-27
  • 打赏
  • 举报
回复
没人知道么...

62,025

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧