如何选择一个 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中如何选择本地文件夹保存

asp.net服务器控件刷新无法保存住值怎么解决?

如何将下拉列表选定的数据传递到另一个表并在 asp.Net MVC 中更新该表

vs2008 中 c#,asp.net 中做网页时,在用menu 控件实现页面跳转时,如何实现参数的传递

ASP.NET+C# FILEUPLOAD控件,如何上传图片到服务器并保存图片路径到数据库?

循环访问 asp.net 网页上的所有控件