如何选择一个 ASP.NET 服务器控件传递保存在 jQuery 中的 JS 变量中的 id?
Posted
技术标签:
【中文标题】如何选择一个 ASP.NET 服务器控件传递保存在 jQuery 中的 JS 变量中的 id?【英文标题】:How to select an ASP.NET server control passing an id saved in a JS variable in jQuery? 【发布时间】:2011-08-01 03:19:52 【问题描述】:应该很简单,但我的脑子很累。如何让这个 jQuery 选择一个 ID 像 lblName 的 ASP.NET 服务器控件。 ID 不同,通过 id 变量传入。
var id = 'Name'; //an example
var $element = $("#<%= 'lbl'+ id.ClientID %>");
【问题讨论】:
【参考方案1】:我建议在 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"
这将使您能够选择控件并能够将这些选择器移动到外部 js 文件中,而不必与控件位于同一页面上。
编辑:将选择器切换为“包含”。这背后的原因是,如果你没有使用 .net 4.0 或者你没有关闭自动生成的 id,你渲染的 id 将是这样的:“cto001$Somethingsomething$specifiedId here”(没有 )。所以你不能使用“Startswith”选择器,因为它试图匹配 id 的动态部分。
您将无法完成结尾,因为您的 id 的最后一部分也是动态的。所以我们留下了“包含”选择器,它将匹配任何包含“lbl”的控件。您可以考虑减少 Id 的第一部分(非动态部分)的通用性,以避免返回不相关的控件。
EDIT2:如果您使用的是 .net 4.0,您可以关闭自动生成的 Id 事物,然后您可以使用更好的“StartsWith”(^=) 选择器,因为渲染的输出 id 将与您指定的相同。您可以通过将 ClientIDMode 设置为“Predictable”来做到这一点
【讨论】:
或者更确切地说,$("[id^='lbl']");
除非我遗漏了什么。
虽然 $= 选择器不正确,但您是对的,不幸的是,Asp.Net 呈现 ID 的方式 ^= 无法编辑答案来解释原因。
你的想法可行,但为了争论,是否仍然可以使用 和 ClientID 来构建整个东西?
是的。缺点是使用这些标签的 javascript 必须始终与引用的控件位于同一页面上。【参考方案2】:
如果这是来自数据绑定操作,您可能必须使用 #
代码块:
var id = 'Name'; //an example
var $element = $("#<%# 'lbl'+ id.ClientID %>");
【讨论】:
以上是关于如何选择一个 ASP.NET 服务器控件传递保存在 jQuery 中的 JS 变量中的 id?的主要内容,如果未能解决你的问题,请参考以下文章
如何将下拉列表选定的数据传递到另一个表并在 asp.Net MVC 中更新该表
vs2008 中 c#,asp.net 中做网页时,在用menu 控件实现页面跳转时,如何实现参数的传递