什么是使用jQuery查找ASP.Net控件的最佳方法?

时间:2020-03-06 15:02:19  来源:igfitidea点击:

在使用jquery实现我的第一个重要脚本时,我需要在页面上找到特定的Web控件。由于我使用DotNetNuke,因此无法保证控件ClientID,因为容器控件可能会在站点之间变化。我最终使用了一个属性选择器,该选择器查找以控件的服务器ID结尾的ID。

$("select[id$='cboPanes']")

这似乎不是最佳方法。还有另一种方法吗?

@Roosteronacid在获得所需控件的同时,我尝试遵循给定技术/语言的习惯用法。当我用C#编程时,我尝试以最好地利用Cfeatures的方式来实现。因为这是我真正使用jQuery的第一步,并且由于将被成千上万的用户使用,所以我想确保自己创建的代码对于其他人来说也是一个很好的例子。

@toohool绝对可以,但是不幸的是,出于性能原因,我需要将javascript保留在单独的文件中。如果内联javascript,因为每个"页面"都是动态生成的,因此我们不能真正利用缓存的优势。我最终会一遍又一遍地将相同的javascript发送给客户端,因为页面上的其他内容已更改。

@Roosteronacid在获得所需控件的同时,我尝试遵循给定技术/语言的习惯用法。当我用C#编程时,我尝试以最好地利用Cfeatures的方式来做到这一点。由于这是我真正使用jQuery的第一步,并且由于将被成千上万的用户使用,因此我想确保自己创建的代码对其他人来说也是一个好例子。

@toohool绝对可以,但是由于性能原因,我需要将javascript保留在单独的文件中。如果内联javascript,因为每个"页面"都是动态生成的,因此我们不能真正利用缓存的优势。我最终会一遍又一遍地将相同的javascript发送给客户端,只是因为页面上的其他内容已更改。

解决方案

在控件上使用标记类,然后通过jQuery选择该标记类。

$("#<%= cboPanes.ClientID %>")

这将动态注入控件的DOM ID。当然,这意味着JS必须在ASPX文件中,而不是在外部JS文件中。

除了在性能上要贵一点之外,使用该选择器我看不到任何错误。毕竟;我们将获得要访问的控件。

在JavaScript导入的上方,我过去(在JavaScript中不是jQuery)所做的一件事是输出与Toohool建议的类似的动态控件ID,并将其分配给在脚本导入中引用的变量。

这样的事情,应该使我们能够利用缓存,并且仍然可以使我们拥有确切的客户端ID:

<head>
    <script type="text/javascript>
        var cboPanesID = <%= cboPanes.ClientID %>;
    </script>

    <!-- this JS import references cboPanesID variable declared above -->
    <script src="jquery.plugin.js"></script>
</head>