如何选择一个ASP.NET服务器控件传递jQuery中JS变量中保存的id?

Ton*_*ich 0 asp.net jquery jquery-selectors

应该很简单,但我的思绪很累.如何让这个jQuery选择一个id为lblName的ASP.NET服务器控件.ID是不同的,通过id变量进入.

var id = 'Name';    //an example
var $element = $("#<%= 'lbl'+ id.ClientID %>");
Run Code Online (Sandbox Code Playgroud)

Adr*_*ian 5

我建议在jquery中使用部分选择器,而不是使用"<%="标签.所以你的选择器看起来像这样

var $elements = $("[id*=lbl]");  //This selector if you want to get all controls that have "lbl" in the id
var $element2 = $("[id$=lblName]"); // This selector if you know the id specified and want that specific control.  It will return all matches that end with "lblName"

$= is "EndsWith"
^= is "StartsWith"
*= is "Contains"
Run Code Online (Sandbox Code Playgroud)

这将使您能够选择控件并能够将这些选择器移动到外部js文件,而不必与控件位于同一页面上.

编辑:将选择器切换为"包含".这背后的原因是如果您没有使用.net 4.0或者您没有关闭自动生成的ID,您的渲染ID将是这样的:"cto001 $ Somethingsomething $ {specifiedId here}"(没有{}).所以你不能使用"Startswith"选择器,因为它试图匹配id的动态部分.

你将无法完成任务,因为你身份的最后一部分也是动态的.所以我们留下了"Contains"选择器,它将匹配任何包含"lbl"的控件.您可以考虑使Id(非动态部分)的第一部分不那么通用,以避免返回不相关的控件.

编辑2:如果您使用.net 4.0,您可以关闭自动生成的Id,然后您可以使用更好的"StartsWith"(^ =)选择器,因为渲染的输出ID将与您指定的相同.您可以通过将ClientIDMode设置为"Predictable"来完成此操作