2009-11-03 76 views
5

我注意到,在System.Web.UI.WebControls命名空間中的大多數(如果不是全部的話)標準Web控件上,您可以添加任何您想要的屬性而不會崩潰這一頁。允許在服務器/ usercontrol上的任何屬性/屬性

以asp:Button控件爲例。

此代碼是完全合法:

<form runat="server"> 
    <asp:Button runat="server" Text="Test button" crapAttribute="crapValue" /> 
</form> 

現在,我已經有了,如果我添加任意屬性,它出故障的自定義服務器控件。它只接受定義了相應公共屬性的屬性。

我得到的錯誤是這樣的「該控件沒有名爲」crapAttribute「的公共屬性」。

我想我的自定義控件接受任何屬性而不會崩潰。我需要做些什麼才能工作?

我已經看過Reflector中的標準控件,它們具有各種屬性和東西,但是我沒有看到立即引起我注意的東西。

我的自定義控件繼承自WebControl的價值。

回答

4

您不必特別做任何事情來允許任意屬性添加控件標記。從WebControl派生的東西通常會挖掘這些屬性並將它們轉儲到屬性集合中。

我想不出爲什麼會失敗。如果有的話,您必須記得在執行Render時將Attributes集合呈現。

您可以添加一個簡單的新控件的代碼示例,但不能解決您的問題嗎?

+1

現在我覺得自己像個驢子:-) 我意識到我實際上是從「Control」繼承而不是「WebControl」。我們曾經從「WebControl」繼承,但由於某種原因它剛剛改爲「Control」。 我相信如果我剛開始繼承「WebControl」,這個問題就會不復存在。 – HaukurHaf

0

一個這樣做是添加自定義屬性在後面的代碼

myCustomControl.Attributes.Add("customproperty", "value"); 

這應該爲你做的工作方式。

但是,我有興趣知道如何在服務器控件本身做到這一點。