【发布时间】:2012-09-18 19:20:22
【问题描述】:
我正在尝试寻找最佳方式来处理 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 页面。哦,我的第二个最终目标是它尽可能简单,并且从一个项目到另一个项目不需要大量的设置时间。
我用一个例子创建了一个 JSFiddle http://jsfiddle.net/Realto619/8ZZYt/2/
【问题讨论】: