2010-03-19 9 views
9

Ich möchte fragen, wie kann ich einen HTML-Anker (ein Element) oder sogar ein Objekt, um ein Postback oder eine Server-Side-Methode ausführen? Ich möchte eine benutzerdefinierte Schaltfläche erstellen (ein Wrapped mit einigen divs, um einige benutzerdefinierte sie zu tun) und ich möchte implementieren OnClick wie ASP.NET LinkButton aussehen?Wie Html Link (Anker) ein Postback wie LinkButton machen?

Wie

<a href="#" onclick="RunServerSideMethod()">Just a simple link button</a> 
+2

brrrr, ich möchte nie zurück zu ASP.NET Webforms gehen, hail MVC :) – Ropstah

+1

sicher MVC ist neu und gute Lösung, aber WebForms wird immer noch mindestens für das alte Projekt (vor MVC veröffentlicht) –

Antwort

9

standardmäßig __doPostBack verwenden steuert die Postbacks an den Server zu tun. __doPostBack übernimmt die UniqueID des Controls (oder in HTML die name-Eigenschaft des HTML-Elements). Der zweite Parameter ist der Name des auszuführenden Befehls.

Also für eine benutzerdefinierte Schaltfläche, machen in den Ausgabestream:

<a id="someclientid" name="someuniqueid" href="javascript:void(0);" onclick="__doPostBack('someuniqueid', '');">val</a> 

In Ihrer benutzerdefinierten Schaltfläche, fügen Sie den IPostBackEventHandler, und diese __doPostBack Aussage wird für Sie seine Methode Raisepostbackevent automatisch ausgelöst.

+0

Das ist gut, aber woher kann ich den Namen der Methode definieren? oder sollte dies in "IPostBackEventHandler" Implementierung sein? –

+0

Sie rufen die gewünschte Methode manuell auf oder verwenden Reflection, um sie dynamisch aufzurufen. Sie haben die volle Kontrolle über die Implementierung, um das zu tun, was Sie tun möchten. –

14

eine serverseitige Steuer HTML verwenden, HtmlAnchor die eine Server-Seite: Tag ist.

<asp:HtmlAnchor runat="server" onclick="RunServerSideMethod">Just a simple link</asp:HtmlAnchor> 
+0

Dies wird, "HtmlAnchor ist kein bekanntes Element" –

0

Um dies zu tun, ohne auf ASP.NET angewiesen, RunServerSideMethod() eine JavaScript-Funktion sein soll, die Ajax verwendet eine Anfrage an den Server zu senden.

Versuchen Sie dieses Tutorial Ajax: http://www.w3schools.com/ajax/

1
One workaround could be : 

invoke dummyButton click in client side event of anchor tag - which will call server side event of this dummy Button by default. so if u place ur server side code in this dummyButton server event - calling anchor tag client side event would invoke this server side dummy button event. 

Code: 

<a id="ancLink" href="javascript:void(0);" >back</a> 

<asp:Button ID="dummyRefresh" runat="server" OnClick="BtnRefreshOnclick" style="display:none"/> 

Javascript: 

ancLink.live("click", function() { 
     callDummyButtonServerEvent(); 
    }); 

function callDummyButtonServerEvent() { 

    $('input[id$=dummyRefresh]').click(); 

} 

Hope this helps. 

Vardhini 
5

Fügen Sie einfach auf Anker-Tag -> runat = "Server" onServerClick = "Ihr Funktionsname", es löst Ihr Problem.

+0

Das ist, was ich verwenden würde – Johnn5er

+0

Dieser löst mein Problem. Es scheint, dass meine Version von asp.net nicht HtmlAnchor hat (oder ich weiß nicht, wie man es importiert) und eine benutzerdefinierte Schaltfläche ist meiner Meinung nach ein bisschen übertrieben. –

0

Sie könnten ASP-Code auch innerhalb des eigentlichen HTML-Codes wie folgt verwenden.

<a id="someclientid" name="someuniqueid" href="javascript:void(0);" onclick="<% YourASPMethod(); %>">val</a> 

Dies würde eine Methode namens YourASPMethod() in der Datei aspx.cs ausführen.