entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

.ascx Parámetros y valores por defecto.

Pregunta de principiante:
Tengo creado un .ascx que consiste en un textbox con máscara de entrada. Quiero crearle un parámetro TipoMascara cuyo valor por defecto sea "numérico". Es decir, que
<uc1:MaskedText runat="server" />
sea lo mismo que <uc1:MaskedText runat="server" TipoMascara="numérico" />

Pero no sé cómo hacerlo.

Gracias por defecto.

3 Respuestas

1voto

alex_alvarez Puntos2160

Yo lo hago a través de Javascript estás validaciones, cada vez que apretes una tecla, que llame a esta función, entonces si es númerico te devolverá el valor, sino, no hará nada.

function IsNumber(evt){
  // Backspace = 8, Enter = 13, ’0′ = 48, ’9′ = 57, ‘.’ = 46
  var key = nav4 ? evt.which : evt.keyCode;
  return (key <= 13 || (key >= 48 && key <= 57) || key == 46);
}

Saludos!

0voto

OscarCanfranc comentado

Creo que no me he explicado bien. Lo diré con otro ejemplo:

Mi .ascx tiene un parámetro llamado comida. Quiero que su valor por defecto sea patata.

1voto

alex_alvarez comentado

Ah! Entonces sí que no entendí bien la pregunta, tal y como dice la respuesta de debajo es una buena opción.

Saludos,

2votos

sergio.uriel Puntos280

Una forma de hacerlo es inicializar tu propiedad al inicializar el control:

protected override void OnInit(EventArgs e)
{
    base.OnInit(e);
    TipoMascara = VALOR_INICIAL;
}

De esta forma tu propiedad tendrá como valor por defecto el valor inicial con el plus de que si esa propiedad está usando el ViewState, su valor no ocuparía espacio en el hidden field __VIEWSTATE de ASP hasta que se modifique posteriormente mediante postbacks.

No sé de qué tipo es tu propiedad, pero una buena idea podría ser usar enumeraciones, tu código sería más mantenible.

0voto

OscarCanfranc comentado

¿Mejor OnInit que Page_Load?

Por otra parte, sí: las enumeraciones mejoran algunas cosas. Por ejemplo, ahora solo tengo que poner como primer elemento el que quiero que me pille por defecto.

Gracias.

2votos

sergio.uriel comentado

OnInit es mejor que Page_Load ya que en OnInit defines el estado inicial del control causando que no ocupe lugar en el hidden field __VIEWSTATE que utiliza ASP al renderizar, mientras que en Page_Load lo que harías es modificar el estado inicial del control causando que los cambios sí ocupen lugar en __VIEWSTATE.

Y si lo único que deseas es que al leer esa propiedad tenga determinado valor por defecto, entonces sí podrías usar las enumeraciones de esa forma ya que al no definir tu propiedad tendrá el valor por defecto de la enumeración, lo que te ahorraría código. Sin embargo si necesitas realizar alguna lógica al momento de definir esa propiedad (set { }) entonces es recomendable inicializarla explicitamente en OnInit.

2votos

antonioruesga Puntos180

Hola,
para hacer visible la propiedad desde cuelquier sitio que la llames, debes ponerle a la Propiedad del ASCX una cabecera tipo:

[Browsable(true)] 
[Category("TipoMascara")] 
public intTipoMascara
    { 
        get         {             return this.tipoMascara;         } 
        set         {             this.tipoMascara= value;         } 
    } 
private int tipoMascara; 

luego en los eventos Init() o Page_Load, deberás inicializar el control con los datos pasados desde la interfaz.
Espero que te sirva...

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta