什么是使用jQuery查找ASP.Net控件的最佳方法?
在使用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>