2009-11-03 10 views
5

Me he dado cuenta de que en la mayoría, si no en todos, los controles web estándar en el espacio de nombres System.Web.UI.WebControls, puede agregar cualquier propiedad que desee sin fallar la página.Permitir cualquier propiedad/atributo en un servidor/usercontrol

Tome el control de botón Asp: para ver un ejemplo.

Este código es perfectamente válido:

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

Ahora, tengo un control de servidor personalizado, que se bloquea si agrego atributos arbitrarios a ella. Solo acepta atributos que tienen definida una propiedad pública correspondiente.

El error que obtengo es algo como esto "El control no tiene una propiedad pública llamada" crapAttribute "".

Me gustaría que mis controles personalizados aceptaran cualquier atributo sin fallar. ¿Qué debo hacer para que funcione?

He mirado los controles estándar en Reflector y tienen todo tipo de atributos y demás, pero no vi nada que me llamó la atención de inmediato.

Mis controles personalizados están heredando de WebControl por lo que vale.

Respuesta

4

No tiene que hacer nada en particular para permitir que los atributos arbitary se agreguen al marcado de control. Las cosas que se derivan de WebControl normalmente recoger estos atributos y volcarlos en la colección de atributos.

No puedo pensar en la razón por la cual esto podría fallar. Debería recordar mostrar la colección Attributes en su implementación de Render si tiene una.

¿Puede agregar un ejemplo simple del código de un nuevo control que falla en su pregunta?

+1

Ahora me siento como un burro :-) Me di cuenta de que de hecho estoy heredando de "Control", no "WebControl". Solíamos heredar de "WebControl" pero fue cambiado a "Control" hace algún tiempo por alguna razón. Creo que si empiezo a heredar de "WebControl", este problema simplemente dejará de existir. – HaukurHaf

0

Una forma de hacerlo es añadir la propiedad personalizada en el código detrás

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

Esto debe hacer el trabajo para usted.

Sin embargo, estoy interesado en saber cómo hacerlo en el control del servidor.

Cuestiones relacionadas