¿Llamar a Javascript desde el botón dentro del repetidor ASP?

Estoy usando un repetidor ASP. En el <ItemTemplate> y <AlternatingItemTemplate> hay, entre otras etiquetas, etc., 3 botones HTML (<input type="button"...) que hacen diferentes llamadas javascript / jquery cuando se hace clic. Esto está funcionando bien.

Ahora, quiero mostrar / ocultar dinámicamente estos botones según un boolean que está vinculado a mi repetidor. Sé que si estuviera usando un botón ASP, simplemente podría usar algo como:

Visible='<%# Eval(bMyBoolean) %>'

Intenté cambiar mis botones HTML a botones ASP, pero luego no pude hacer que las llamadas javascript funcionaran correctamente. Sé que puede conectar las llamadas de Javascript en el código subyacente para cada botón (en el Repeater.ItemDataBound event), pero no estoy seguro de cómo hacerlo en el código detrás de mi escenario. Aquí hay un ejemplo de uno de mis botones HTML:

<input type="button" id="myButton" value="Test" onclick="MyJavascriptFunction(this,'<%# CType(Container.DataItem, myClassObject).FirstName%>');" />

En el ejemplo anterior, estoy pasando el valor de FirstName (que es una propiedad del objeto de clase que estoy vinculando al repetidor) a mi función de Javascript.

Para mí, parece que si estoy usando un repetidor ASP, entonces tendría sentido usar botones ASP, pero no sé si realmente hace una diferencia.

Entonces, mi pregunta es: ¿Cómo puedo mostrar / ocultar dinámicamente un botón HTML dentro de un repetidor ASP basado en un valor booleano que está vinculado al repetidor? O, si eso es una mala práctica, ¿cómo puedo hacer una llamada javascript con un botón ASP, como la llamada anterior (haciendo referencia a un valor del repetidor)?

¡Gracias de antemano por cualquier ayuda / consejo!

preguntado el 28 de agosto de 11 a las 03:08

1 Respuestas

puede generar información de estilo dinámicamente en función de su booleano. Considera esto:

<itemTemplate>
    <input type='button' style='<%# getVisbility(Eval("MyBoolValue")) %>' 
           value='click me' />
</itemTemplate>

Luego, en tu código, tendrías:

protected function getVisibility(isVisible as boolean) as string 
   if isVisible then
     return "display:inline; "
   else
     return "display:none;"
   end if 
end function 

Ahora, si desea realizar una llamada de JavaScript desde el control asp.net, también tiene opciones:

La opción más simple, pero de ninguna manera la mejor, es hacer JS en línea:

<itemTemplate>
   <asp:button runat="server" onclientClick="return confirm('click to submit');" 
               text="Click!" />
</itemTemplate>

hay opciones más complejas con el uso de JQuery que le permitirían capturar dinámicamente un evento de clic y determinar la fila exacta del repetidor que está seleccionando. Un ejemplo de esto es:

<itemTemplate>
   <asp:button cssclass ='clickMe' runat="server" rel='<%# Eval("MyCol")%>' 
               text="Click!" />
</itemTemplate>

Entonces el código jquery:

$(".clickMe").click(function(){
  var myVal = $(this).attr("rel");
})

Respondido 28 ago 11, 07:08

¡Impresionante! Me gusta la primera idea, ya que estoy usando botones HTML :) pero ¿hay alguna razón por la que deba cambiar a los botones ASP? - lhan

La única razón para cambiar a los botones ASP sería si está procesando la lógica en el código subyacente. Dado que ese no parece ser el caso, me quedaría con el botón HTML, ya que en realidad es un poco más rápido sin la pequeña sobrecarga de instanciar cada uno de los botones en su repetidor. - Stephen Wrighton

bueno, técnicamente, estoy procesando el código detrás. Dos de los botones hacen llamadas JQuery Ajax (primero una ventana emergente personalizada de jquery, luego, según su selección, hago un procesamiento y luego potencialmente los llevo a una página diferente). Sin embargo, todo eso está funcionando bien, es solo ahora que con la adición del tercer botón, mostraré el 3 y ocultaré el nuevo botón, o viceversa. Entonces empezó a hacerme preguntarme cómo estaba haciendo las cosas, ¡y aquí estamos! Supongo que me quedaré con mis botones HTML por ahora, ¡muchas gracias por la ayuda! - lhan

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.