2009-05-04 14 views
13

Tengo un UserControl con algunas propiedades booleanas. Me gustaría que se configuren como verdaderos de manera predeterminada si no se establecen explícitamente en la página .aspx, o al menos forzarlos a declararse si no hay forma de establecer un valor predeterminado. Sé que hay una forma de hacerlo porque muchos controles requieren propiedades que rompen la aplicación cuando intentas ejecutarla y no se declaran.UserControl Valor predeterminado en la propiedad

¿Cómo puedo hacer esto?

Ejemplo:

<je:myControl runat="server" id="myControl" showBox="False"> 

que desea que el sistema sea rompa o establecer el valor predeterminado a "true" si showBox se quede fuera de esta declaración.

Gracias!

Respuesta

20

Definir sus propiedades con sus valores por defecto de esa manera:

private bool _ShowBox = false; 
public bool ShowBox 
{ 
    set { _ShowBox = value; } 
} 

o en el constructor de su control, los valores predeterminados establecidos:

public MyControl() 
{ 
    _ShowBox = false; 
} 

o excepción tiro si no está asignado:

private bool _ShowBox = false; 
public bool ShowBox 
{ 
    set { _ShowBox = value; } 
    get { return _ShowBox; } 
} 
+0

gracias! esto es perfecto – Jason

+0

'if (_ShowBox == null) {' puede ser cierto porque no podrá establecer un bool como nulo. – Peter

+0

¿Qué? comprobar bool con null siempre devolverá falso !!!! – Yuki

2

acaba de establecer el valor predeterminado deseado, al declarar una variable:

class myControl 
{ 
    private bool _showBox = true; 

    [PersistenceMode(PersistenceMode.Attribute), DefaultValue(false)] 
    public bool showBox 
    { 
     get { return _showBox; } 
     set { _showBox = value; } 
    } 
} 

opcional se puede añadir el DefaultValueAttribute para el diseñador.

24

Sé que llego tarde pero solo quería mencionar que

[DefaultValue(false)] 

NO establecerá el atributo en falso. Ver: http://msdn.microsoft.com/en-us/library/system.componentmodel.defaultvalueattribute.aspx. Dice:

"DefaultValueAttribute no hará que un miembro se inicialice automáticamente con el valor del atributo. Debe establecer el valor inicial en el código".

Este atributo es solo para indicar en el Diseñador de Visual Studio lo que usted considera que es un valor predeterminado. Si alguien que usa su control cambia este valor, se mostrará en negrita para indicar que este valor no es el predeterminado.

2

ReSharper recomienda el uso de un auto-propiedad, y establecer el valor por defecto en el constructor, así:

public class MyControl 
{ 
    public MyControl() 
    { 
    ShowBox = true; 
    } 

    public bool ShowBox { get; set; } 
} 
Cuestiones relacionadas