13

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

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

这在 3.5 版中是否已解决?(我记得读过你必须获得一些使 ID 友好的特殊 dll)。

4

7 回答 7

16

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

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

<asp:TextBox ID="txtExample" runat="server" />

然后您的 jQuery 可以轻松找到该控件,即使它被母版页渲染破坏,如下所示:

$("[id$=txtExample]")

运算符匹配字符串的$=结尾,名称 mangling 总是在前面。完成此操作后,您可以像这样获得实际损坏的 ID:

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

然后无论如何解析你认为合适的。

编辑:这是一种简单的方法,但它可能比仅仅给每个控件一个与其旧 ID 相同的类更多地影响性能。

请参阅 Jeff 在另一个 jQuery 优化问题上发布链接的这篇文章:

jQuery:选择器的性能分析

于 2008-12-05T00:15:39.630 回答
10

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

于 2008-11-04T13:17:13.297 回答
3

有很多方法可以使用 jQuery 选择元素。您可以仔细选择标签/类名。
在 ASP.NET 4.0 之前,我不知道有什么办法可以弄乱 id 本身。当然,您总是可以尝试ASP.NET MVC 框架。

于 2008-11-04T13:38:16.360 回答
1

虽然我还没有听说过你所说的那种新的“特殊 dll”,但一种简单的方法是使用

var myControlId; 

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

我也讨厌服务器 ID:s... ASP.NET MVC 是解决所有让我讨厌 asp.net 网络表单(Viewstate...等)的事情的解决方案。

于 2008-11-04T13:39:19.273 回答
0

您还可以覆盖扩展类中控件的 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; } }
}
于 2008-11-04T14:38:05.113 回答
0

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

于 2008-11-04T14:12:48.427 回答
0

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

于 2017-09-04T07:38:58.873 回答