2010-03-19 79 views
9

Me gustaría preguntar cómo puedo hacer un ancla html (un elemento) o incluso cualquier objeto para hacer una devolución de datos o ejecutar un método del lado del servidor? Quiero crear un botón personalizado (un envuelto con algunos divs para personalizarlos) y quiero implementar OnClick para que se vea como el ASP.NET LinkButton?¿Cómo dejar que Html Link (ancla) haga una devolución de datos para ser como LinkButton?

Como

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

brrrr, no quiero volver a ASP.NET Webforms, granizo MVC :) – Ropstah

+1

seguro MVC es una nueva y buena solución, pero WebForms todavía se usa al menos para el proyecto anterior (antes de MVC lanzó) –

Respuesta

9

Por defecto, los controles utilizan __doPostBack hacer la devolución de datos al servidor. __doPostBack toma el UniqueID del control (o en HTML, el nombre de propiedad del elemento HTML). El segundo parámetro es el nombre del comando para disparar.

Así que para un botón personalizado, hacen que el flujo de salida:

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

En su botón personalizado, añadir el IPostBackEventHandler, y esta declaración __doPostBack se disparará su método RaisePostBackEvent automáticamente.

+0

Eso es bueno, pero ¿desde dónde puedo definir el nombre del método para ejecutar? o esto debería estar en la implementación 'IPostBackEventHandler'? –

+0

Llama manualmente al método que desea, o usa el reflejo para llamarlo dinámicamente. Usted tiene el control total sobre la implementación para hacer lo que quiere hacer. –

14

Utilice un control HTML del lado del servidor, HtmlAnchor que es un servidor de una etiqueta.

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

Esto se pone, "HtmlAnchor no es un elemento conocido" –

0

Para hacer esto sin depender de ASP.NET, RunServerSideMethod() debe ser una función de JavaScript que utiliza Ajax para enviar una petición al servidor.

probar este tutorial de 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

Solo agregue la etiqueta de anclaje -> runat = "server" onServerClick = "Su nombre de función", resuelve su problema.

+0

Esto es lo que usaría – Johnn5er

+0

Éste resuelve mi problema. Parece que mi versión de asp.net no tiene HtmlAnchor (o no sé cómo importarla) y hacer un botón personalizado es un poco exagerado en mi opinión. –

0

También podría usar código ASP desde el código HTML real de la siguiente manera.

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

Esto ejecutará un método llamado YourASPMethod() en el archivo aspx.cs.

Cuestiones relacionadas