我想将 jQuery 与 asp.net webfoms 一起使用。我是否需要一个特殊的工具包以便 .net 控件吐出友好的控件 ID?
原因是,我不想编写引用我的 html ID 的 javascript,例如 control_123_asdfcontrol_234。
这在 3.5 版中是否已解决?(我记得读过你必须获得一些使 ID 友好的特殊 dll)。
我想将 jQuery 与 asp.net webfoms 一起使用。我是否需要一个特殊的工具包以便 .net 控件吐出友好的控件 ID?
原因是,我不想编写引用我的 html ID 的 javascript,例如 control_123_asdfcontrol_234。
这在 3.5 版中是否已解决?(我记得读过你必须获得一些使 ID 友好的特殊 dll)。
我发现的最简单的方法就是匹配大多数控件的损坏 ID 的末尾。知道的例外是单选按钮列表和复选框列表 - 你必须对它们有点棘手。
但是如果你的 .aspx 页面中有这个:
<asp:TextBox ID="txtExample" runat="server" />
然后您的 jQuery 可以轻松找到该控件,即使它被母版页渲染破坏,如下所示:
$("[id$=txtExample]")
运算符匹配字符串的$=
结尾,名称 mangling 总是在前面。完成此操作后,您可以像这样获得实际损坏的 ID:
$("[id$=txtExample]").attr("id")
然后无论如何解析你认为合适的。
编辑:这是一种简单的方法,但它可能比仅仅给每个控件一个与其旧 ID 相同的类更多地影响性能。
请参阅 Jeff 在另一个 jQuery 优化问题上发布链接的这篇文章:
您可以使用myControlId = "<%= myControl.ClientID %>";
输出用于在 Javascript 中引用它的(非友好)ID。
有很多方法可以使用 jQuery 选择元素。您可以仔细选择标签/类名。
在 ASP.NET 4.0 之前,我不知道有什么办法可以弄乱 id 本身。当然,您总是可以尝试ASP.NET MVC 框架。
虽然我还没有听说过你所说的那种新的“特殊 dll”,但一种简单的方法是使用
var myControlId;
在您单独的 js 文件中,然后将客户端 ID 分配给 aspx/ascx 中的该 var。
我也讨厌服务器 ID:s... ASP.NET MVC 是解决所有让我讨厌 asp.net 网络表单(Viewstate...等)的事情的解决方案。
您还可以覆盖扩展类中控件的 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; } }
}
您可以将唯一属性附加到您的控件(我不确定您是否可以在不扩展基本 Web 控件的情况下执行此操作;快速搜索仅显示 this),然后使用“元素 [属性:值]”选择器。
试试$get('myId')
。我认为这是在非 HTML 文档中选择元素的方法。