2010-04-24 8 views
7

Ich versuche, das ImageButton-Steuerelement nur für die clientseitige Skriptausführung zu verwenden. Ich kann das clientseitige Skript angeben, das mit der OnClientClick-Eigenschaft ausgeführt werden soll, aber wie verhindere ich, dass es jedes Mal, wenn der Benutzer darauf klickt, versucht, einen Post zu senden? Es gibt keinen Grund zum Posten, wenn diese Schaltfläche angeklickt wird. Ich habe CausesValidation auf False gesetzt, dies verhindert jedoch nicht das Posten.Kann ich ein ASP.NET-ImageButton erstellen, das nicht postbackt?

+0

Jeder Grund, nicht nur das onclick Ereignis eines img Umbaus zu verwenden? –

+0

@BigJason: Ich würde es gerne vermeiden, wenn möglich. Diese Schaltfläche ist sehr komplex und auf der Serverseite aufgebaut. – Giffyguy

Antwort

4

Hier ist eine Art und Weise Sie es ohne in Konflikt mit dem Postback Funktion anderer Kontrollen tun könnte:

Definieren Sie Ihre Taste etwas wie folgt aus:

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

Die „my“ in der Prozedur endet für OnClientClick ist eine Möglichkeit, das __doPostBack-Client-Ereignis von asp.net umzubenennen, das das Postback erzwingt; wir einfach das Verhalten außer Kraft setzen, indem nichts Vergleichbares zu diesem Skript zu tun:

<script type="text/javascript"> 

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

Edit: Yeesh, ich fühle mich wie ich eine Dusche, nachdem einige der schmutzigen Tricks nehmen müssen, dass ich, um ziehen müssen asp zu bekommen. net zu tun, was ich will.

+1

Der" mein "Trick funktionierte für mich, aber so hat "Return false" am Ende, was mich weniger eklig fühlen – Carl

+0

Ich habe das gleiche Problem ... http://stackoverflow.com/questions/25979847/how-to-prevent-postback-on-asp-button -while-Anzeige-ein-Popup-Using-Jquery. Ich bin gerade dabei, Ihre Lösung zu testen. – SearchForKnowledge

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

Das wäre perfekt, außer dass diese Schaltfläche dynamisch auf der Serverseite erstellt wird und ein .NET-Objekt sein muss. – Giffyguy

+0

Sie können immer ein 'asp: Literal'-Steuerelement auf Ihrer Seite haben, und in Ihrem Code hinter dynamisch gesetzten Text, dh:' myLiteral.Text = ""; ' –

1

eine serverseitige Bildsteuerung

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

Ziemlich sicher Verwenden Sie den Client onclick Ereignis, dass hinzufügen.

2

wäre eine andere Lösung, die eine PostBackUrl zu definieren, die nichts

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

weiß ich dieses Problem bereits beantwortet worden, aber eine einfache Lösung ist aus dem HTML-Onclick-Methode (dh die ASPX OnClientClick Methode) false zurück z.B

Die Rückgabe false verhindert, dass der Browser die Anfrage an den Server i.s. stoppt das .NET-Postback.

+0

Ich möchte eine zusätzliche Option von OnClientClick = "doYourStuff();" vorschlagen. Gib dann innerhalb von DoYourStuff() false zurück. Auf diese Weise kann DoYourStuff abhängig von anderen Faktoren Wahr oder Falsch zurückgeben und möglicherweise das Postback für bestimmte Bedingungen erlauben. – TTT

+0

Wenn ich mehrere Tasten in einer GridView habe, funktioniert meine Funktion nur beim ersten Mal und zu einem späteren Zeitpunkt wird die Funktion nicht ausgelöst. http://stackoverflow.com/questions/25979847/how-to-prevent-postback-on-asp-button-while-displaying-a-popup-using-jquery – SearchForKnowledge

+0

@TTT Das ist, was ich zuerst versuchte, aber aus irgendeinem Grund es funktioniert nicht. Obwohl, wenn ich das 'return false;' im 'OnClientClick' als CodeClimber vorgeschlagen habe, funktioniert es. – TheWanderingMind

1

Dies funktioniert gut für mich:

Verwenden OnClientClick Ihr Skript zu schreiben und PostBackUrl="javascript:void(0);" Postbacks zu vermeiden.

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

Lösung 1

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

OR Lösung 2

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

Zusätzlich (Lösung 2), sie JavaScript Verfahren in dieser Form sein kann

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

in Code hinter

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

Verwenden OnClientClick Ihr Skript und PostBackUrl = schreiben "javascript: void (0);" Postback vermeiden

Verwandte Themen