处理ASP.NET的ClientID的最佳方法是什么?

时间:2012-09-27 04:21:00

标签: jquery asp.net clientid

我正在尝试找到最好的方法来处理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

4 个答案:

答案 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直接选择要快得多。

http://jsperf.com/id-vs-ends-with

答案 3 :(得分:1)

正确答案如下

var txt1 = $('#<%= txt1.ClientID %>');
$(txt1).click(function () {
    alert('hi');
});

她在javascript上创建了一个新变量,该变量是基于其呈现的客户端ID

引用控件的