ASP.NET 能不能自定义服务器端控件输出为 HTML 时的 id?

作者:vkvi 来源:ITPOW(原创) 日期:2011-3-29

.NET Framework 4.0 中,已经解决了此问题,所以此文只适用于 .NET Framework 4.0 以下。请参见 .NET Framework 4.0 ClientIDMode,自己给控件指定输出时的 HTML id

ASP.NET 能不能自定义服务器端控件输出为 HTML 时的 id?因为我发现本来我的服务器端 DropDownList ID 为 _contentType,输出的 select 的 id 却成了 ctl00__main__contentType,搞得我 JavaScript 很不好操作,想自定义,可以自定义吗?

答案是不能,但为什么呢?

ASP.NET 编程最大的改变是桌面式编程,比如以前获取一个值用 Request.Form,而 ASP.NET 中除了用这个方法还可以直接用类似 ID.Text 的方法来获取值。

由于 ASP.NET 支持 MasterPageGridView 等一系列类似嵌套的东西,同时为了配合验证控件等客户端功能的运行,所以 ASP.NET 必须通过自己的一套规则来给最终输出的 HTML 控件的 id 和 name 命名,如果是用户自己来命名,那么 ASP.NET 可能就会造成混乱,最终无法正确取值。

ASP.NET 这种不允许自定义 id、name 的特性,虽然方便了服务器端编程,但确实在 JavaScript 编程上造成一定的麻烦。

如果我们的 JavaScript 想要操作这个控件怎么办呢?

一种是如果简单的页面,没有涉及到 MasterPage、GridView 等这些情况,那么可以直接用这个服务器端 ID 来当作客户端 id。

一种是使用了 MasterPage、GridView 等这些情况,这种情况我们最好不要试图使用 ASP.NET 的命名规则去获取 id。因为我试过,不同版本的 .NET Framework 的命名规则有点不同。此时我们可以在 JavaScript 中嵌入 <%=YourControlID.ClientID%> 来实现 JavaScript 中获取。当然侧面的方法还有通过 ezj 获取控件的 class 来实现。

相关文章