【问题标题】:What's the best way to deal with ASP.NET's ClientID处理 ASP.NET 的 ClientID 的最佳方法是什么
【发布时间】: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);
    }

这种方法的一个问题是它要求我在每个页面中放置以下隐藏字段:

&lt;asp:HiddenField runat="server" ID="prepended_ID_value" Value="dotNet_ID_Prefix" /&gt;

...这使它有点笨拙(或增加了现有的笨拙因素)。

我的最终目标是让我不再需要使用&lt;%= id.ClientID %&gt;(或任何需要服务器端代码的东西),这样我的所有 JS 都可以作为包含调用,而不必将其嵌入到我的ASPX 页面。哦,我的第二个最终目标是它尽可能简单,并且从一个项目到另一个项目不需要大量的设置时间。

我用一个例子创建了一个 JSFiddle http://jsfiddle.net/Realto619/8ZZYt/2/

【问题讨论】:

    标签: jquery asp.net clientid


    【解决方案1】:

    正确答案如下

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

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

    【讨论】:

      【解决方案2】:

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

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

      但请记住,这种选择器比直接使用带有&lt;%= id.ClientID %&gt; 的 id 选择要慢得多。

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

      【讨论】:

      • 我实际上在我的“klunky”解决方案中使用了它,但我认为它会增加太多的开销,并且会减慢速度超过可接受的数量。
      【解决方案3】:

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

      您可以使用静态作为ClientIDModeEnumeration

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

      【讨论】:

      • 我以前用过ClientIDMode=Predictable,但这仍然需要我比我想要的更多的注意力。我显然错过了ClientIDMode=Static 选项,它似乎非常适合我的需求。谢谢!
      【解决方案4】:

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

      【讨论】:

      • 因为我不知道这是一个选项。听起来它符合我的标准。我会试一试,看看效果如何。谢谢!
      • 这是“不好的做法”,我将举一个例子说明为什么不好,假设您有 3 个控制器,其 div 的 id 为 supposeToBeUniqe,现在您将所有这 3 个控制器加载到一个aspx页面>页面上有3个同名的id!
      猜你喜欢
      • 1970-01-01
      • 2010-09-06
      • 1970-01-01
      • 2011-05-20
      • 2011-03-19
      • 2016-05-26
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多