2008-11-04 60 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文檔中選擇元素的方式。