Webforms和jQuery,如何匹配ID?

我想在asp.net webfoms中使用jQuery。 我是否需要获得一个特殊的工具包,以便.net控件吐出友好的控件ID?

原因是,我不想写javascript引用我的HTML ID,如control_123_asdfcontrol_234。

是否已在3.5版中解决了这个问题? (我记得读过你必须得到一些让ID友好的特殊dll)。

我找到的最简单的方法就是匹配大多数控件的损坏ID的末尾。 知道的例外是radiobutton列表和复选框列表 – 你必须对它们有点棘手。

但是如果你在.aspx页面中有这个:

 

然后你的jQuery可以很容易地找到那个控件,即使它被主页面渲染所破坏,如下所示:

 $("[id$=txtExample]") 

$=运算符匹配字符串的结尾,名称mangling始终位于前面。 完成后,您可以获得这样的实际受损ID:

 $("[id$=txtExample]").attr("id") 

然后解析你认为合适的任何东西。

编辑:这是一种简单的方法,但它可能更多的是性能损失,而不仅仅是给每个控件一个类与旧ID相同。

看到这篇文章杰夫发布了另一个jQuery优化问题的链接:

jQuery:选择器的性能分析

你可以使用myControlId = "<%= myControl.ClientID %>"; 输出用于在Javascript中引用它的(非友好)id。

使用jQuery选择元素有很多种方法。 您可以为一个选择仔细的Tag / ClassName选择。
在ASP.NET 4.0之前,我不知道有任何方法可以搞砸id的问题。 当然,您总是可以尝试使用ASP.NET MVC框架 。

虽然我没有听说过那个新的“特殊dll”,但你会谈到一种简单的方法

 var myControlId; 

在单独的js文件中,然后将客户端ID分配给aspx / ascx中的var。

我也讨厌服务器ID:s … ASP.NET MVC是使用asp.net webforms(Viewstate等等)让我烦恼的所有事情的解决方案。

您可以将唯一属性附加到控件上(我不确定您是否可以在不扩展基本Web控件的情况下执行此操作;快速搜索仅显示此操作 )然后使用“element [attribute:value]”选择器。

您还可以覆盖扩展类中控件的UniqueName和/或ClientID属性,并返回实际ID。

 MyTextBox : Web.UI.TextBox { // This modifies the generated 'name' attribute override UniqueID { get { return ID; } } // This modifies the generated 'id' attribute override ClientID { get{ return ID; } } } 

试试$get('myId') 。 我认为这是在非HTML文档中选择元素的方法。