2010-04-24 21 views
7

Estoy tratando de usar el control ImageButton solo para la ejecución de scripts del lado del cliente. Puedo especificar el script del lado del cliente para ejecutar utilizando la propiedad OnClientClick, pero ¿cómo puedo evitar que intente publicar cada vez que el usuario hace clic en él? No hay ninguna razón para publicar cuando se hace clic en este botón. Establecí CausesValidation en False, pero esto no impide que se publique.¿Puedo crear un ImageButton de ASP.NET que no se devuelva?

+0

¿Alguna razón para no utilizar el evento onclick de una etiqueta img? –

+0

@ BigJason: me gustaría evitarlo si es posible. Este botón es muy complejo y está construido en el lado del servidor. – Giffyguy

Respuesta

4

He aquí una manera que podría hacerlo sin entrar en conflicto con el funcionamiento de devolución de datos de otros controles:

definir su botón de algo como esto:

<asp:Button runat="server" Text="Button" UseSubmitBehavior="false" OnClientClick="alert('my client script here');my" /> 

El "mi" que termina en el controlador para OnClientClick es una forma de alias del evento del cliente __doPostBack de asp.net que fuerza la devolución de datos; simplemente anular el comportamiento por no hacer nada similar a esta secuencia de comandos:

<script type="text/javascript"> 

function my__doPostBack(eventTarget, eventArgument) { 
    //Just swallow the click without postback of the form 
} 
</script> 

Editar: Yeesh, siento que tengo que tomar una ducha después de algunos de los trucos sucios que necesito para tirar con el fin de obtener asp. neta para hacer lo que quiero.

+1

El truco" mi "funcionó para mí, pero también lo hizo "return false" al final que me hizo sentir menos asqueroso – Carl

+0

Estoy teniendo el mismo problema ... http://stackoverflow.com/questions/25979847/how-to-prevent-postback-on-asp-button -while-displaying-a-popup-using-jquery. Estoy a punto de probar tu solución ahora. – SearchForKnowledge

1
<image src="..." onclick="DoYourThing();" /> 
+0

Eso sería perfecto, excepto que este botón está construido dinámicamente en el lado del servidor y debe ser un objeto .NET. – Giffyguy

+0

Siempre puede tener un control 'asp: literal' en su página, y en su código detrás de establecer texto dinámicamente a eso, es decir:' myLiteral.Text = ""; ' –

1

Utilice un servidor de control de imagen

<asp:Image runat="server" .../> 

bastante seguro de que puede agregar el evento de cliente onclick a eso.

2

Otra solución sería definir un PostBackUrl que no hace nada

<asp:imagebutton runat="server" PostBackUrl="javascript:void(0);" .../> 
19

Sé que este problema ya ha sido contestada, pero una solución sencilla es volver falsa del HTML onclick método (es decir, el método ASPX OnClientClick) p.ej

<asp:ImageButton ID="ImageNewLink" runat="server" 
ImageUrl="~/images/Link.gif" OnClientClick="DoYourStuff(); return false;" /> 

Devolución de falso detiene el navegador para que la solicitud vuelva al servidor i.s. detiene la devolución de datos de .NET.

+0

Me gustaría sugerir una opción adicional de OnClientClick = "return DoYourStuff();". Luego devuelve falso dentro de DoYourStuff(). De esta forma, DoYourStuff puede devolver verdadero o falso dependiendo de otros factores y, potencialmente, permitir la devolución de datos para ciertas condiciones. – TTT

+0

Si tengo varios botones en un GridView, el mío solo funciona la primera vez y en cualquier momento después, la función no se dispara. http://stackoverflow.com/questions/25979847/how-to-prevent-postback-on-asp-button-while-displaying-a-popup-using-jquery – SearchForKnowledge

+0

@TTT Eso es lo que intenté primero, pero por alguna razón No funciona. Aunque, si puse el 'return false;' en 'OnClientClick' como sugirió CodeClimber, funciona. – TheWanderingMind

1

Esto funciona muy bien para mí:

Uso OnClientClick para escribir su guión y PostBackUrl="javascript:void(0);" para evitar la devolución de datos.

<div class="close_but"> 
    <asp:ImageButton ID="imgbtnEChartZoomClose" runat="server" ImageUrl="images/close.png" OnClientClick="javascript:zoomclosepopup();" PostBackUrl="javascript:void(0);" /> 
    </div> 
1

Solución 1

<asp:ImageButton ID="btn" runat="server" ImageUrl="~/images/yourimage.jpg" 
OnClientClick="return false;" /> 

O Solución 2

<asp:ImageButton ID="btn" runat="server" ImageUrl="~/images/yourimage.jpg" 
OnClientClick="yourmethod(); return false;" /> 

Además (solución 2), su método de javascript puede ser en esta forma

<script type="text/javascript"> 
    function yourmethod() { 
    __doPostBack (__EVENTTARGET,__EVENTARGUMENT); //for example __doPostBack ('idValue',3); 
    } 
</script> 

en código detrás de

protected void Page_Load(object sender, System.EventArgs e) 
{ 
    if (this.IsPostBack) { 
     string eventTarget = this.Request("__EVENTTARGET") == null ? string.Empty : this.Request("__EVENTTARGET"); 
     string eventArgument = this.Request("__EVENTARGUMENT") == null ? string.Empty : this.Request("__EVENTARGUMENT"); 
    } 
} 
0

Use OnClientClick para escribir su script y PostBackUrl = "javascript: void (0);" para evitar la devolución de datos

Cuestiones relacionadas