2008-11-04 62 views
10

我想用asp.net webfoms使用jQuery。我是否需要获得一个特殊的工具包,以便.net控件吐出友好的控制ID?Webforms和jQuery,如何匹配ID的?

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

这是在版本3.5中解决? (我记得读过你必须得到一些特殊的DLL,这使ID的友好)。

+1

我猜你的意思是Webforms,而不是winforms? – splattne 2008-11-04 13:27:19

+0

是webforms,mybad。 – Blankman 2008-11-04 13:35:28

回答

10

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

+0

这就是如果JavaScript是内嵌在我的.aspx页面,但我的将是一个单独的.js文件'不会被解析。 – Blankman 2008-11-04 13:19:09

3

有很多方法可以用jQuery选择元素。你可以做一个小心的标签/类名选择。
我不知道有什么方法可以在ASP.NET 4.0之前解决id本身的问题。当然你可以试试ASP.NET MVC Framework

1

虽然我还没有听说过新的“特殊的DLL”你们谈论一个简单的方法是使用

var myControlId; 

在你单独的js文件,然后在客户端的ID分配给该变种在aspx/ascx。

我太讨厌服务器ID:s ... ASP.NET MVC是解决所有使asp.net webforms(ViewState等等)困扰我的东西的解决方案。

0

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

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; } } 
} 
14

我发现的最简单的方法就是要匹配的大多数控制错位ID结束。知道是单选按钮列表和复选框列表的例外 - 你必须有点棘手。

但是,如果你有这样的在.aspx页面:

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

那么你的jQuery不难发现,控制,即使它是由母版页呈现错位,这样的:

$("[id$=txtExample]") 

$=运算符匹配字符串的末尾,名称总是位于前面。一旦你这样做,你可以得到这样的实际损坏的ID:

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

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

编辑: 这是一个简单的方法,但它可能是更多的性能问题,而不仅仅是让每个控件的类与旧ID相同。

看到这篇文章,杰夫张贴在另一个jQuery的优化问题的链接:

jQuery: Performance Analysis of Selectors

0

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