Webforms和jQuery,如何匹配ID?

时间:2008-11-04 13:13:48

标签: asp.net jquery web-controls

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

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

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

7 个答案:

答案 0 :(得分:15)

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

但如果您在.aspx页面中有此内容:

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

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

$("[id$=txtExample]")

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

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

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

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

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

<强> jQuery: Performance Analysis of Selectors

答案 1 :(得分:10)

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

虽然我没有听说过这个新的“特殊dll”你谈到一个简单的方法就是使用

var myControlId; 

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

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

答案 4 :(得分:0)

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

答案 5 :(得分: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; } }
}

答案 6 :(得分:0)

试试@component('mail::layout') {{-- Header --}} @slot('header') @component('mail::header', ['url' => config('app.url')]) {{ config('app.name') }} @endcomponent @endslot {{-- Body --}} {{ $slot }} test {{-- Subcopy --}} @isset($subcopy) @slot('subcopy') @component('mail::subcopy') {{ $subcopy }} @endcomponent @endslot @endisset {{-- Footer --}} @slot('footer') @component('mail::footer') © {{ date('Y') }} {{ config('app.name') }}. All rights reserved. @endcomponent @endslot @endcomponent 。 我认为这是在非HTML文档中选择元素的方法。