<asp:Label ID="Label1" runat="server" Text="test"></asp:Label>
当页面被渲染时,该控件的ID会更改为类似于这样的内容
<span id="ctl00_ContentPlaceHolder1_Label3">test</span>
我如何阻止ASP.NET更改ID以执行类似于以下jQuery操作的操作
$('#label1').html(xml);
<asp:Label ID="Label1" runat="server" Text="test"></asp:Label>
当页面被渲染时,该控件的ID会更改为类似于这样的内容
<span id="ctl00_ContentPlaceHolder1_Label3">test</span>
我如何阻止ASP.NET更改ID以执行类似于以下jQuery操作的操作
$('#label1').html(xml);
将ClientIDMode="Static"
设置。
<asp:Label ID="myLabel" ClientIDMode="Static" runat="server" Text="testing"></asp:Label>
.NET 4现在可以让您选择您的ClientIDMode:
类型:System.Web.UI.ClientIDMode
一个指示如何生成ClientID属性的值。
AutoID
ClientID的值是通过将每个父命名容器的ID值与控件的ID值连接而成。在数据绑定方案中,如果呈现了多个控件实例,则会在控件的ID值前插入递增值。每个段由下划线字符(_)分隔。此算法用于早于ASP.NET 4版本的ASP.NET。Static
ClientID的值设置为ID属性的值。如果控件是命名容器,则该控件用作其包含的任何控件的命名容器层次结构的顶部。Predictable
此算法用于位于数据绑定控件中的控件。ClientID的值是通过将父命名容器的ClientID值与控件的ID值连接而成。如果控件是生成多个行的数据绑定控件,则在末尾添加ClientIDRowSuffix属性中指定的数据字段的值。对于GridView控件,可以指定多个数据字段。如果ClientIDRowSuffix属性为空,则在末尾添加一个连续的编号,而不是数据字段值。此数字从零开始,并逐行递增1。每个段由下划线字符(_)分隔。Inherit
控件继承其命名容器控件的ClientIDMode设置。这是默认值。
不要使用这个选择器
$('#Label1')
使用这个,基本上你正在使用经典的ASP内联服务器端代码。
$('#<%= Label1.ClientID %>')
这将插入任何生成的ID作为文本。
如果你想要使用外部文件,我建议你创建一个全局的obj来保存所有客户端ID,并在你的外部文件中引用该obj(虽然不是最理想的解决方案,但也是一种解决方法)。
var MyClientIDs = {
Label1 = '<%= Label1.ClientID %>',
Label2 = '<%= Label2.ClientID %>',
Textbox1 = '<%= Textbox1.ClientID %>',
Textbox2 = '<%= Textbox2.ClientID %>'
};
然后在你的外部文件中,你可以访问Label1,例如:$('#' + MyClientIDs.Label1)
ClientIDMode="Static"
。这将解决您的问题。<asp:Label ID="Label1" ClientIDMode="Static" runat="server" Text="test"></asp:Label>
你无法阻止 asp.net 生成这些ID,因为这就是它的工作方式。
你仍然可以这样使用jquery:
$('#<%=label1.ClientID %>').html(xml)
或者$('[id$=_label1]').html(xml)
$('#ctl00_ContentPlaceHolder1_Label3').html(xml);
$('#<%= Label3.ClientID %>').html(xml);
2. 在需要在 jQuery 中使用的每个控件上定义唯一的 CSS 类,这仍然允许您将 js 代码放在外部文件中 -
<asp:Label ID="Label3" runat="server" Text="test" CssClass="label3">
</asp:Label>
$('.label3').html(xml);
3. 使用jQuery选择器进行模式匹配原始ID,这将允许您将js代码放入外部文件中 -
$('[id$=Label3]').html(xml);
简短回答,不用担心使用asp.net的ID。在asp.net中,您可以向标签添加自己的属性:
<asp:TexBox ID="myTBox" runat="server" MyCustomAttr="foo" />
然后在 jQuery 中,您可以通过以下方式引用此元素:
$("input[MyCustomAttr='foo']")
data-
前缀,那么它就是有效的HTML5。 - Gabe Moothart$('.CssClassName'). ...
ClientIDMode="Static"
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="Main_MasterPage" ClientIDMode="Static" %>
内联代码是正确的方法。 然而,在ASP.NET 4.0中将会发生变化。 我们花费了一些时间添加了一个功能,允许完全控制在客户端生成的ID。以下是有关此功能的一些网络资源。
这里的大部分建议可能都可行,但是对jQuery代码的测试结果表明,纯ID选择器是迄今为止最快的。我经常使用以下这种方式:
$("[id$=origControlId]")
这段代码运行缓慢,但除非页面有很多控件和大量jQuery代码,否则问题不太明显。
由于将多个类分配给一个控件相当容易,您可以为每个控件赋予与其ID匹配的CSSClass。由于它们将是唯一的(您必须注意生成多个控件的重复类型控件),因此可以通过class进行选择。
例如:
<asp:Label ID="Label1" CssClass="Label1 SomeOtherClass" runat="server" Text="test">
</asp:Label>
可以通过以下方式唯一选择:
$(".Label1")
这个速度几乎和ID选择器一样快。
我从未考虑过这个:
$('#<%= Label1.ClientID %>')
但我会尝试它!
ClientScriptManager.RegisterClientScriptBlock(GetType(), "someKey",
"$('#" + Label1.ClientID + "').html(xml);", true);