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文档中选择元素的方法。