2

我试图找到最好的方法来处理 ASP.NETrunat="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/

4

4 回答 4

2

为什么不只使用ClientIDMode=Static?在 Web.config 中设置它,以便您的客户端 ID 在整个站点中保持原样。

于 2012-09-27T04:23:03.543 回答
2

如果您使用的是.Net framework 4.0 或更高版本,请使用Control的ClientIDMode属性

您可以使用 Static 作为ClientIDModeEnumeration

ClientID 值设置为 ID 属性的值。如果控件是命名容器,则该控件用作它所包含的任何控件的命名容器层次结构的顶部。

于 2012-09-27T04:24:17.723 回答
1

您可以使用带有选择器的 jQuery 结尾:

$('input[id$="myServerId"]')

但请记住,这种选择器比直接使用 id 选择要慢得多<%= id.ClientID %>

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

于 2012-09-27T04:24:23.193 回答
1

正确答案如下

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

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

于 2015-02-17T11:00:58.590 回答