【发布时间】:2010-12-08 12:40:10
【问题描述】:
我有一个 MasterPage,在它的内容部分中我添加了一个 FORM 元素。 访问该页面时,我的所有控件都被重命名,因为 FORM 是 runat=server。 因此在 jquery 中选择时,甚至表单也被重命名了
我该如何解决这个问题?
谢谢
【问题讨论】:
标签: c# javascript asp.net jquery master-pages
我有一个 MasterPage,在它的内容部分中我添加了一个 FORM 元素。 访问该页面时,我的所有控件都被重命名,因为 FORM 是 runat=server。 因此在 jquery 中选择时,甚至表单也被重命名了
我该如何解决这个问题?
谢谢
【问题讨论】:
标签: c# javascript asp.net jquery master-pages
对于母版页,所有元素都会将 ct100__etc 附加到元素的 ID。这是一个功能,因为它是一个命名容器。通常,解决它的方法是使用如下语法:
$("#<%= button.ClientID %>").click(..);
访问较长的 ID,或依靠 CSS 类来识别元素。另一个技巧是用 DIV HTML 元素包装表单的某些部分,并为其指定一个 ID。
HTH。
【讨论】:
你不能,这是 .Net 的行为。您可以做的是调整您的 jquery 使用以合并您正在使用的控件的 ClientID。最简单的方法是将某种翻译变量注入到脚本头部的某个地方。
<script language="javascript">
var myControl1 = '<%=myControl1.ClientID %>';
</script>
然后您可以使用 myControl1 作为字符串变量,以更易读的方式将客户端 ID 注入到您的 jquery 调用中。
【讨论】:
在这里查看这篇文章
http://john-sheehan.com/blog/custom-jquery-selector-for-aspnet-webforms/
解释得很清楚。诀窍是使用 ClientId
【讨论】:
除了许多其他答案中建议的.ClientID 方法外,您还可以使用jQuery 的endswith 选择器。
eg:选择id以“myid”结尾的元素(eg ctl001_form1_myid)
$('[id$="myid"]');
或者如果您使用.net 4,您可以设置ClientIdMode="false" 以防止重命名。
【讨论】:
您可以为此使用Control.ClientID。类似的东西
$("#<%= yourelement.ClientID %>")
【讨论】:
你也可以创建一个 CSSCLASS 然后通过 $('.classname') 访问
<asp:TextBox id="tb4" Text="Hello World!" cssclass="txtboxtb4" runat="server" />
alert($('.txtboxtb4').val());
【讨论】:
另一种方法是将控件放在 span 标签中。
<span id="txt">
<asp:TextBox ID="txt" runat="server"></asp:TextBox>
</span>
你可以在 jQuery 中选择这样的元素。
$('#txt > input').val('Hello world');
但我的方式是,选择以选择器结尾的元素。
$('input[id$="txt"]').val('Hello world');
适用于我的案例。希望有所帮助。
【讨论】: