Ir a página   Siguientes >> 
Hacer un RadioButton dentro de un Repeater Volver arriba
Estos últimos días me he estado peleando con una cosilla algo rara en Todoexpertos. Y es que a veces ASP.NET tiene algunas cosas que te dan ganas de tirarte de los pelos... o tirarle de los pelos a ScottGu (aunque no tenga muchos).

Mi objetivo era bien sencillo. En lugar de utilizar un control RadioButtonList, lo que yo quería era generar diferentes RadioButtons usando el control Repeater, de modo que cuando seleccionas en cualquier RadioButton, el que estaba seleccionado previamente (si lo había) se deseleccionase, y sólo quedara uno.

Esto es algo bastante típico y muy sencillo de llevar a cabo, sin más que ponerle a todos los RadioButton el mismo "GroupName", que se acaba convirtiendo en el atributo "name" en HTML.

Pero ahora viene el problema, y es que al estar dentro de un Repeater, ASP.NET va generando un prefijo único al name (al igual que hace con el ID), de modo que no es posible que todos tengan el mismo name, por mucho GroupName que especifiques.

Tan sencillo como lo quería, tan sencillo como ASP.NET hacía la puñeta.

Pero bueno, menos mal que javascript y yo somos bastante amigos y pronto Googleé una solución que no tuve más que modificar a mi gusto.

La función javascript que utilicé es el siguiente:

    function SetUniqueRadioButton(nameregex, rid)
    {
       re = new RegExp(nameregex);
       rb = document.getElementById(rid);
       var inputs = document.getElementsByTagName('input');
       for(i = 0; i < inputs.length; i++)
       {
          elm = inputs[i]
          if (elm.type == 'radio')
          {
             if (re.test(elm.name))
             {
                elm.checked = false;
             }
          }
       }
 
       rb.checked = true;
    }

Y al radiobutton hay que ponerle esto dentro de su atributo "onclick":

onclick="SetUniqueRadioButton('Repeater1.*', '" + RadioButton1.ClientID + "')"

Como vemos, por una parte le estamos pasando una expresión regular, y por otra el Identificador que Javascript sabrá leer.

Lo que hace la función javascript es leer todos los elementos "input" de la página, se asegura de que sean de type "radio" y, de ser así, que cumplan la expresión regular. Siempre se le pone el checked=false, para, posteriormente, poner el checked=true a nuestro RadioButton.

Ya sé la pregunta... ¿qué narices representa la expresión regular? Lo único que representa es el prefijo que el simpático de ASP.NET le va a poner a todo elemento que esté dentro del Repeater1. No tenéis más que poner el identificador del Repeater y ya está

Espero que os sea útil.

Link Permanente | Publicación: 05/05/2008 19:10:02 | Categoria: AJAX y Javascript



iWhere: aplicación para Facebook Volver arriba
Durante estas semanitas he estado trabajando en mis ratos libres en una aplicación muy chula para Facebook.

Bueno, lo de chula lo digo yo, jeje.

En realidad no se trata de una aplicación para Facebook sólo, sino que mi intención era usar "TodasLasCosasNuevas" que se me ocurrían, como todo tipo de mejoras de ASP.NET 3.5: expresiones lambda, el uso de "var", inicializadores, LINQ para SQL, y demás cosillas que han dejado una respetable cosecha de potenciales artículos para este blog.

En cuanto a programar para Facebook, he usado el Facebook Developer Toolkit, en detrimento del Facebook.NET. Prácticamente ambos hacen lo mismo, y por lo único por lo que me he decidido por el primero es porque tenían más descargas, más visitas y más actualizaciones (aunque eso no significa apenas nada).

Lo único que tengo claro es que programar aplicaciones para Facebook usando el Toolkit es absolutamente sencillo. Apenas un par de cambios con respecto a programar en ASP.NET y ya está.

En cuanto a la aplicación en sí, se trata de dar a conocer a tus amigos de dónde eres, sin más que elegir un punto en el mapa. Cuando has indicado de dónde eres, puedes ver de dónde son tus amigos en un mapa... obviamente un mapa de Google, y así he aprovechado para utilizar mi propio control de GoogleMaps para ASP.NET porque desde ya mismo comienzo con una nueva versión (por cierto, todavía estoy dudando en si sacar una pequeña nueva versión 2.8 o hacer un gran cambio con la versión 3.0).

Por cierto... no he dicho la url de la aplicación, ¿no? Podéis accederla desde http://apps.facebook.com/iwheere/

Sí, tiene repetida la letra "e" porque Facebook requiere que la url de sus aplicaciones tenga más de 6 letras. Además es case sensitive... manda narices... en PHP tenía que estar hecho el Facebook ese, jaja.


Si queréis me podéis añadir como amigo (buscad a Subgurim)

Link Permanente | Publicación: 05/05/2008 18:45:11 | Categoria: ASP.NET 3.5



Validar varios RadioButton Volver arriba
Seguro que hay alguna forma de hacerlo más fácil, pero yo no la he encontrado... así que me puse manos a la obra y lo he hecho yo mismo... he de confesar que me gusta demasiado hacer las cosas por mí mismo, aunque ya esté hecho, simplemente por el hecho de aprender, por tener un control 100% de lo que sucede... y por haberlo hecho yo, jeje

El caso es el siguiente: tenemos varios RadioButton diferentes, todos ellos pertenecientes al mismo GroupName, de modo que hacer click sobre uno de ellos implica que se desmarque el previamente elegido.

Por ejemplo eso lo tenemos en Todoexpertos.com, cuando un usuario finaliza y puntúa la pregunta al experto puede darle una puntuación de 0 a 5 y para eso usamos 6 RadioButton's, y no queremos hacerlo usando el RadioButtonList.

Hasta ahora marcábamos por defecto una puntuación de 3 sobre 5... pero decidimos obligar al usuario a elegir una puntuación. Para ello requeríamos verificar, al hacer click sobre un Button, que se hubiera elegido una de las opciones.

Lo primero que se viene a la cabeza es usar un RequiredFieldValidator, pero yo no encontré la forma de hacerlo para RadioButton's separados... así que me puse manos a la obra con un pequeño Javascript.

Os muestro el Javascript que lo utiliza, comentándolo sobre la marcha.

    <script type="text/javascript">
   
    // Valida que alguno de los elementos del mismo "groupname" haya sido elegido
    function validateRadioButtonList(groupname, message)
    {
        // Recogemos todos los elementos "input" de nuestra página
        var inputs = document.getElementsByTagName("input");
        var hasItems = false;
       
        // Recorremos cada uno de los elementos,
        for (var i = 0; i < inputs.length; i++)
        {
            // y seleccionamos si hay alguno de tipo "radio"
            if (inputs[i].type == 'radio')
            {
                // Verificamos que ese RadioButton pertenece al groupname especificado
                var name = inputs[i].name;
                var isFromGroup = (name.lastIndexOf(groupname) + groupname.length ) == name.length;
               
                // En de encontrar un RadioButton con el groupname...
                if (isFromGroup)
                {  
                    // Marcamos que lo hemos encontrado
                    hasItems = true;
                   
                    // Si hay alguno checkeado, devolver true
                    if (inputs[i].checked)
                    {
                        return true;
                    }
                }
            }
        }
       
       
        if (hasItems)
        {
            // Si llegamos aquí es que hemos encontrado
            // RadioButton's con el groupname, pero ninguno checkeado
            if (!message) message = 'Debes elegir una opción';
            alert(message);
            return false;
        }
        else
        {
            // Si llegamos aquí es que no hemos encontrado
            // ningún RadioButton con el groupname buscado
            return true;
        }
    }
   
    </script>


Eso en cuanto al javascript. Un ejemplo que lo use:

RadioButton.aspx

    <div>
        <div>
 &nbs