2014-05-04 46 views
0

聲明:我正在嘗試做的事情可能是如此可怕的錯誤,隨時爲我提供完全不同的方式。我試圖創建一個用戶控件包裝一個ASP標籤,並在我的項目上添加一些額外的功能(例如一些改變標籤服務器端行爲的屬性)。其背後是這樣的在UserControl的asp.net標籤上使用AssociatedControlID

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Label.ascx.cs" Inherits="MyNamspace.Label" %> 
<asp:Label runat="server" ID="lblThis" /> 

和許多屬性:

public string Text 
{ 
    get { return lblThis.Text; } 
    set { lblThis.Text = value; } 
} 

我堅持用AssociatedControlID雖然,我敢肯定這是因爲lblThis控件的HTML很簡單沒有意識到頁面上的任何其他控件,它都被隔離。最終,我得到錯誤「無法找到與標識'lblThis'相關聯的標識爲'foo'的控件。」

所以我的問題是,有沒有辦法讓AssociateControlID以這種方式工作,或者,有沒有更好的方式爲asp控件添加功能?

回答

1

如果您的所有用戶控件都有一個子控件,我認爲您最好將其創建爲自定義控件。這些都是完全用代碼編寫的,所以它將擺脫多餘的.ascx文件,並且您的AssociatedControlID也可以工作。

對於一個教程,看看這個:

http://msdn.microsoft.com/en-us/library/vstudio/yhzc935f(v=vs.100).aspx

他們的榜樣,甚至發生展示如何擴展標籤控制,這是你想要什麼。該頁面有點長,但最終它只是創建一個繼承自Label的類,然後將其註冊爲<%@ Register %>或在web.config文件中。

+0

完美,謝謝!我知道我以錯誤的方式討論我的自定義控件。 – Ozziereturnz

3

我知道這是一個老問題,但我今天正在清理一些舊的Web表單頁面,並遇到了同樣的問題。 TBH,我懶得重新創建所有用戶控件作爲自定義控件,所以我想看看它是否可以在沒有太多變化的情況下完成。

實際上相當簡單。如果您的用戶控件的Foo的ID,它包含(例如)與Bar ID的文本框,則標籤變爲:

<asp:Label runat="server" AssociatedControlID="Foo:Bar"...> 

希望這可以幫助別人有同樣的問題。

+0

謝謝,這就像一個魅力。 – Lareau

+0

有趣的是,我們已經在我們的代碼庫中這樣做了,但點擊標籤仍然不起作用。 –