2011-12-20 30 views
7

Tengo una función en todas las páginas de mi sitio que se encuentra en mi página maestra y quiero que se ejecute desde algún método jQuery Ajax.usando métodos web con páginas maestras

Tengo algo de código como este en el momento

jQuery

$(document).ready(function() { 
    $("#test").click(function() { 
    $.ajax({ 
     type: "POST", 
     url: "Default.aspx/GetDate", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
     $("#test").text(msg.d); 
     } 
    }); 
    }); 
}); 

HTML en la página principal

<div id="test">Click here for the time.</div> 
código

Asp.Net atrás en mi VB Master

<WebMethod> _ 
Public Shared Function GetDate() As String 
    Return DateTime.Now.ToString() 
End Function 

Curre ntly esto no funciona a menos que muevo el método Web a la página Default.aspx VB

¿Hay alguna manera de cambiar esta parte

url: "Default.aspx/GetDate", 

Para utilizar la función de página maestra?

He intentado cambiar a

url: "template.master/GetDate", 

Pero esto sólo me da un error 404

¿Alguna idea?

gracias de antemano

Respuesta

9

Su código WebMethod no pueden residir en el código subyacente para su página maestra.

He encontrado que es más fácil incluir un servicio web real o un servicio WCF en mi proyecto para cosas que tendré que llamar desde varias páginas.

EDIT:

Para añadir un servicio WCF para su proyecto: (. Es decir Agent.svc)

  1. Haga clic derecho en el proyecto
  2. seleccionar [Servicio WCF] y darle un nombre
  3. configurar el servicio (ver http://www.codeproject.com/KB/aspnet/jQuery_To_WCF.aspx)

más de unos pocos ejemplos aquí en la Stackover flujo ...

Espero que ayude.

+1

+1 acaba de agregar un servicio WCF habilitado para este ajax – Erix

+0

No estoy del todo seguro de cómo ir sobre la adición de un servicio WCF en mi ¿proyecto? –

+0

@Jamie Taylor: ver la actualización Acabo de añadir ... – ShaneBlake

3

¿Qué tal si ponemos el webmethod en una clase base?

public class WebMethodBase : Page 
{ 
    <WebMethod> _ 
    Public Shared Function GetDate() As String 
     Return DateTime.Now.ToString() 
    End Function 
} 

A continuación, herede esta clase de las páginas en las que desea exponer el método web.

Perdónenme por mezclar C# y VB, no estoy familiarizado con la sintaxis de VB.

+2

Si añado una clase base, ¿cómo puedo luego usar la función dentro de la que AJAX? –

1

Puede ir a la ruta del método de la Clase Base, como Andreas mencionó anteriormente.

Asegúrese de que:

  • El WebMethod es estática.
  • En su llamada Ajax, cambiar dinámicamente la URL basado en la página que está viendo. Algo como esto:

(en Ajax llamar :)

url: window.location.pathname.substr(1) + "/GetDate" 
+0

Esta es generalmente una buena metodología. Sin embargo, para los sitios donde la página de inicio es simplemente 'http: // example.com /', la url será 'null'. O cualquier otra subruta que no incluya explícitamente el documento predeterminado. –

Cuestiones relacionadas