Webforms和jQuery,如何匹配ID?

发布于 2024-07-08 00:44:17 字数 219 浏览 5 评论 0原文

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

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

3.5 版本解决了这个问题吗? (我记得读过你必须获得一些特殊的 dll,使 ID 变得友好)。

I want to use jQuery with asp.net webfoms. Do I need to get a special toolkit so the .net controls spit out friendly Control ID's?

Reason being, I don't want to write javascript referencing my html ID's like control_123_asdfcontrol_234.

Has this been addressed in version 3.5? (I remember reading you have to get some special dll that makes ID's friendly).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

糖果控 2024-07-15 00:44:18

我发现的最简单的方法就是匹配大多数控件的损坏 ID 的末尾。 已知的例外情况是单选按钮列表和复选框列表 - 您必须对它们采取一些技巧。

但是,如果您的 .aspx 页面中有这样的内容:

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

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

$("[id$=txtExample]")

$= 运算符与字符串的末尾匹配并且名称修改总是在前面。 完成此操作后,您可以获得实际的损坏 ID,如下所示:

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

然后以您认为合适的方式解析它。

编辑:
这是一种简单的方法,但与仅仅为每个控件提供与其旧 ID 相同的类相比,它可能会对性能造成更大的影响。

请参阅 Jeff 发布的关于另一个 jQuery 优化问题的链接的文章:

jQuery:选择器的性能分析< /a>

The easiest way I've found is just to match on the end of the mangled ID for most controls. The exceptions that Know of are radiobutton lists and checkbox lists - you have to be a little trickier with them.

But if you have this in your .aspx page:

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

Then your jQuery can easily find that control, even if it's mangled by the master page rendering, like this:

$("[id$=txtExample]")

The $= operator matches the end of the string and the name mangling is always on the front. Once you've done that, you can get the actual mangled ID like this:

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

and then parse that anyway you see fit.

EDIT:
This is an easy way, but it may be more of a performance hit than just giving each control a class the same as its old ID.

See this article that Jeff posted a link to on another jQuery optimization question:

jQuery: Performance Analysis of Selectors

鲜肉鲜肉永远不皱 2024-07-15 00:44:18

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

You can use myControlId = "<%= myControl.ClientID %>"; to output the (non-friendly) id used to reference it in Javascript.

临风闻羌笛 2024-07-15 00:44:18

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

There are a lot of ways to select elements with jQuery. You could do careful Tag/ClassName selection for one.
I don't know of any way to mess around with the id's themselves until ASP.NET 4.0. Of course you could always give the ASP.NET MVC Framework a try.

一页 2024-07-15 00:44:18

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

var myControlId; 

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

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

Although I haven't heard of that new "special dll" you talk about one simple way would be to use

var myControlId; 

In your separate js-file and then assign the client id to that var in the aspx/ascx.

I too hate server ID:s... ASP.NET MVC is the solution to all the things that annoys me with asp.net webforms (Viewstate... etc etc).

等往事风中吹 2024-07-15 00:44:18

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

You can attach a unique attribute to your controls (I'm not sure if you can do this without extending the base web controls; a quick search revealed only this) and then use the "element[attribute:value]" selector.

又爬满兰若 2024-07-15 00:44:18

您还可以覆盖扩展类中控件的 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; } }
}

You can also override UniqueName and / or ClientID properties of the controls in an extending class and return the actual 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; } }
}
深巷少女 2024-07-15 00:44:18

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

Try $get('myId').
I think this is the way to select an element in non HTML docs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文