我正在尝试找到最好的方法来处理ASP.NET为使用runat="server"
创建的任何元素预先赋值的方式,而不必使用<%= id.ClientID %>
。我今天早些时候提出了以下解决方案,但我确信有更优雅的解决方案:
$(document).ready(function() {
var dotNetPrefix = $("[id$='prepended_ID_value']").attr('id');
if (dotNetPrefix !== undefined) {
dotNetPrefix = dotNetPrefix.replace('prepended_ID_value', '');
dotNetPrefixID = '#' + dotNetPrefix;
console.log('dotNetPrefix = ' + dotNetPrefix);
testDotNet('prepended_ID_value');
} else {
console.log('Hidden Field is Missing! => <asp:HiddenField runat="server" ID="prepended_ID_value" Value="dotNet_ID_Prefix" />');
}
});
function testDotNet(getID) {
var test_dotNetPrefixID = $(dotNetPrefixID + getID).val();
console.log('$(\'' + dotNetPrefixID + getID + '\').val() = ' + test_dotNetPrefixID);
}
这种方法的一个问题是它要求我在每一页中放置以下隐藏字段:
<asp:HiddenField runat="server" ID="prepended_ID_value" Value="dotNet_ID_Prefix" />
......这使得它有点笨拙(或增加现有的笨拙因素)。
我的最终目标是让它不再需要使用<%= id.ClientID %>
(或任何需要服务器端代码的东西),这样我的所有JS都可以被称为包含而不必嵌入它在我的ASPX页面中。哦,我的第二个最终目标是尽可能简单,不需要从项目到项目的大量设置时间。
我创建了一个带有示例http://jsfiddle.net/Realto619/8ZZYt/2/
的JSFiddle答案 0 :(得分:2)
为什么不使用ClientIDMode=Static?在Web.config中设置它,以便您的客户端ID将在整个站点中写入。
答案 1 :(得分:2)
如果您使用 .Net framework 4.0或更高版本,请使用控件的ClientIDMode属性
您可以使用静态作为ClientIDModeEnumeration
ClientID值设置为ID属性的值。如果 control是一个命名容器,控件用作顶部 为其包含的任何控件命名容器的层次结构。
答案 2 :(得分:1)
你可以使用jQuery结束选择器:
$('input[id$="myServerId"]')
但请记住,这种选择器比使用<%= id.ClientID %>
的ID直接选择要快得多。
答案 3 :(得分:1)
正确答案如下
var txt1 = $('#<%= txt1.ClientID %>');
$(txt1).click(function () {
alert('hi');
});
她在javascript上创建了一个新变量,该变量是基于其呈现的客户端ID
引用控件的