2009-11-03 11 views
5

Ho notato che sulla maggior parte, se non tutti, controlli web standard nello spazio dei nomi System.Web.UI.WebControls, è possibile aggiungere qualsiasi proprietà che si desidera a loro senza crash la pagina.Permettere qualsiasi proprietà/attributo su un server/usercontrol

Prendere l'asp: controllo pulsante per un esempio.

Questo codice è perfettamente valido:

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

Ora, ho un controllo server personalizzato che si blocca se posso aggiungere attributi arbitrari ad esso. Accetta solo attributi che hanno una proprietà pubblica corrispondente definita.

L'errore che ottengo è qualcosa come "Il controllo non ha una proprietà pubblica denominata" crapAttribute "".

Vorrei che i miei controlli personalizzati accettassero qualsiasi attributo senza arresti anomali. Cosa devo fare per farlo funzionare?

Ho esaminato i controlli standard in Reflector e hanno tutti i tipi di attributi e roba ma non c'era nulla che io abbia visto e che immediatamente ha attirato la mia attenzione.

I miei controlli personalizzati ereditano da WebControl ciò che vale.

risposta

4

Non è necessario fare nulla in particolare per consentire l'aggiunta di attributi arbitary al markup di controllo. Le cose derivanti da WebControl normalmente acquisiscono questi attributi e li riversano nella collezione Attributes.

Non riesco a pensare al motivo per cui ciò fallirebbe. Dovresti ricordare di rendere la collezione Attributes all'implementazione di Render se ne hai uno.

Puoi aggiungere un semplice esempio del codice di un nuovo controllo che non risponde alla tua domanda?

+1

Ora mi sento come un asino :-) Mi sono reso conto che in effetti sto ereditando da "Control", non "WebControl". Abbiamo ereditato da "WebControl" ma è stato cambiato in "Controllo" qualche tempo fa per qualche motivo. Credo che se appena inizio ad ereditare da "WebControl", questo problema cesserà di esistere. – HaukurHaf

0

Un modo per farlo è l'aggiunta della proprietà personalizzata in codice dietro

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

Questo dovrebbe fare il lavoro per voi.

Tuttavia, sono interessato a sapere come farlo nel controllo server stesso.

Problemi correlati