2008-10-07 7 views
51

Ich habe eine ASP.NET Linkbutton-Steuerelement auf meinem Formular. Ich möchte es für Javascript auf der Client-Seite verwenden und verhindern, dass es zurück auf den Server posten. (Ich möchte das Linkbutton-Steuerelement verwenden, damit ich es in einigen Fällen ausblenden und deaktivieren kann, so dass ein Straight-Up-Tag nicht bevorzugt wird).Deaktivieren Sie das Postback auf einem <ASP: LinkButton>

Wie verhindere ich, dass es auf dem Server zurückgeschrieben wird?

Antwort

57

ASPX Code:

<asp:LinkButton ID="someID" runat="server" Text="clicky"></asp:LinkButton> 

-Code hinter:

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     someID.Attributes.Add("onClick", "return false;"); 
    } 
} 

Was als HTML macht, ist:

<a onclick="return false;" id="someID" href="javascript:__doPostBack('someID','')">clicky</a> 

In diesem Fall geschieht, was die Onclick Funktionalität Ihr Validator wird . Wenn es falsch ist, wird die Verknüpfung "href" nicht ausgeführt. Ist dies jedoch wahr, wird die href ausgeführt. Dies beseitigt Ihre Post zurück.

+1

'' und Hinzufügen der oben genannten, wenn Klicken nichts passiert:/ – SearchForKnowledge

3

In C#, würden Sie so etwas tun:

MyButton.Attributes.Add("onclick", "put your javascript here including... return false;"); 
0

Vielleicht wollen Sie auch die clientseitige Funktion false zurück zu haben.

<asp:LinkButton runat="server" id="button" Text="Click Me" OnClick="myfunction();return false;" AutoPostBack="false" /> 

Sie betrachten könnte auch:

<span runat="server" id="clickableSpan" onclick="myfunction();" class="clickable">Click Me</span> 

ich den klickbaren Klasse verwenden Dinge wie Zeiger zu setzen, Farbe, etc., so dass sein Aussehen zu einem Anker-Tag ähnlich ist, aber ich weiß nicht sich darum kümmern müssen, dass sie zurückgeschickt werden oder das href = "javascript: void (0);" Trick.

+1

OnClick den Server bindet -side-Ereignis, nicht das clientseitige Ereignis. onclientclick ist das Client-Ereignis –

34

Das klingt vielleicht wie eine nicht hilfreiche Antwort ... Aber warum verwenden Sie einen LinkButton für etwas rein Client-Seite? Verwenden Sie ein Standard-HTML-Anchor-Tag und stellen Sie die Aktion onclick auf Ihr Javascript ein.

Wenn Sie möchten, dass der Server den Text dieses Links generiert, verwenden Sie einen asp:Label als Inhalt zwischen den Start- und End-Tags des Ankers.

Wenn Sie das Skriptverhalten basierend auf dem serverseitigen Code dynamisch ändern müssen, sollten Sie die Methode asp:Literal als eine Technik in Betracht ziehen.

Aber wenn Sie keine serverseitigen Aktivitäten aus dem Click-Ereignis des LinkButton ausführen, scheint es nicht viel Sinn, es hier zu verwenden.

+0

Ich stimme zu. In erster Linie möchte ich eine Skin verwenden, die ich bereits für Linkbuttons erstellt habe, die anderswo verwendet werden. – y0mbo

+0

Kannst du die Skin nicht ändern oder die Stile für den gegebenen Anker von den in der Skin verwendeten entfernen? –

+2

Sie können einen Linkbutton auch dann bevorzugen, wenn das Server-Postback deaktiviert ist, wenn: 1) Sie weiterhin den Vorteil eines Steuerelements wünschen, das INamingContainer implementiert. Beispiel: Sie haben mehrere Benutzersteuerelemente auf einer Seite, die jeweils einen LinkButton enthält, der eine eindeutige ID benötigt. 2) Sie möchten die ASP-Client-Validierung beibehalten. – eniac

5

Ich denke, Sie sollten mit einem HyperLink-Steuerelement untersuchen. Es ist ein serverseitiges Steuerelement (also können Sie die Sichtbarkeit und Ähnliches aus Code manipulieren), aber es lässt ein normales ol'-Anchor-Tag aus und verursacht kein Postback.

0

Niemand scheint es so zu tun:

createEventLinkButton.Attributes.Add("onClick", " if (this.innerHTML == 'Please Wait') { return false; } else { this.innerHTML='Please Wait'; }"); 

Dies scheint der einzige Weg zu sein, die funktioniert.

0

Warum nicht ein leeres Ajax-Update-Panel verwenden und das click-Ereignis der Linkbuttons mit ihm verbinden?Auf diese Weise nur die Update-Panel wird aktualisiert werden, vermeidet somit einen Postback und ermöglicht Ihnen, Ihr Javascript

1

Aufruf Java-Script-Funktion auf Onclick Ereignis ausgeführt werden soll.

0

Anstatt das Attribut implementieren:

public partial class _Default : System.Web.UI.Page{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
    someID.Attributes.Add("onClick", "return false;"); 
}} 

Verwendung:

OnClientClick="return false;" 

innerhalb von asp: Linkbutton-Tag

-1

Verwendung HTML-Link statt asp Link und Sie können Label verwenden zwischen html link für serverseite steuerung

23

Sie können tun es auch

...LinkButton ID="BtnForgotPassword" runat="server" OnClientClick="ChangeText('1');return false"...

Und es den Link-Button Postbacks stoppen

1

Haben Sie die OnClientClick zu verwenden versucht?

var myLinkButton = new LinkButton { Text = "Click Here", OnClientClick = "JavaScript: return false;" }; 

<asp:LinkButton ID="someID" runat="server" Text="clicky" OnClientClick="JavaScript: return false;"></asp:LinkButton> 
12

Gerade gesetzt href = "#"

<asp:LinkButton ID="myLink" runat="server" href="#">Click Me</asp:LinkButton> 
1

gerade durchgekaut vor wenigen Minuten, der richtige Weg, es zu tun ist, verwenden

  1. OnClientClick
  2. Return False()

wie die folgenden Beispiel Codezeilen:

<asp:LinkButton ID="lbtnNext" runat="server" OnClientClick="findAllOccurences(); return false();" Visible="false"/> 

Gerade diese Zeile aus meinem Arbeits Code kopiert.

0

Etwas anderes Sie tun können, wenn Sie Ihre Bildlaufposition erhalten wollen, ist dies:

<asp:LinkButton runat="server" id="someId" href="javascript: void;" Text="Click Me" /> 
0

In der Jquery-Ready-Funktion Sie so etwas wie unten tun können -

var hrefcode = $('a[id*=linkbutton]').attr('href').split(':'); 
var onclickcode = "javascript: if`(Condition()) {" + hrefcode[1] + ";}"; 
$('a[id*=linkbutton]').attr('href', onclickcode); 
+1

Willkommen bei StackOverflow! Da das OP JQuery nicht erwähnt hat, ist Ihre Antwort ein wenig off-topic.Um die Antwort besser zu machen, könnten Sie einen zusätzlichen Kontext für die Integration von JQuery hier einfügen. Auf der anderen Seite, da die Frage vor 5 Jahren gestellt und beantwortet wurde (viele Male), wären nur sehr thematische Antworten zu diesem Zeitpunkt nützlich. – dg99

Verwandte Themen