ASP.NET名称是否一致?

ASP.NET名称是否一致?,asp.net,name-mangling,Asp.net,Name Mangling,当您有这样一个ASP控件时: <asp:TreeView ID="TreeItems" runat="server"></asp:TreeView> <script type="text/javascript"> //initialize client names of server side controls. var TreeItemsId = "ctl00_TreeItems"; </script> 它生成的h

当您有这样一个ASP控件时:

<asp:TreeView ID="TreeItems" runat="server"></asp:TreeView>
<script type="text/javascript">
    //initialize client names of server side controls.
    var TreeItemsId = "ctl00_TreeItems";    
</script>

它生成的html会破坏名称。如果我想直接访问生成的项目的ID,我可以尝试找出它将名称更改为什么,然后查找该ID


生成的项目名称是否保证按照Microsoft的标准以特定方式完成?我只是担心,如果他们发布了一个新版本的.NET,并以不同的方式实现它,就会出现这种情况。有没有一种方法可以在代码中生成名称?它不能保证一致性(这是一个实现细节)


请改用ClientID(它将为您提供生成的id)。

不,它不能保证一致性

只要使用相同版本的框架,它就应该是一致的,但是对服务器的更新可能会改变这一点,所以您不应该依赖于知道生成的名称


使用
ClientID
属性查找控件的生成id。

如果要在客户端脚本中使用它,可以执行以下操作:

<script type="text/javascript">
    //initialize client names of server side controls.
    var TreeItemsId = "<%= TreeItems.ClientID  %>";    
</script>

//初始化服务器端控件的客户端名称。
var TreeItemsId=“”;
当它呈现给客户端时,它将如下所示:

<asp:TreeView ID="TreeItems" runat="server"></asp:TreeView>
<script type="text/javascript">
    //initialize client names of server side controls.
    var TreeItemsId = "ctl00_TreeItems";    
</script>

//初始化服务器端控件的客户端名称。
var TreeItemsId=“ctl00\u TreeItems”;

我相信使用.NET 4上的ASP.NET,您可以指定以某种方式生成ID

见:

此外,如果您使用的是jQuery,则可以确保标称ID将位于客户机ID中,因此您可以使用以下内容选择它:

$("input[id*='TreeItems']")

请参阅:

另外,只要您在同一命名容器中。您的选择器具有pro/con功能,可以在模板中找到使用相同ID创建的所有控件。