2011-12-20 12 views
7

Ho una funzione su tutte le pagine del mio sito che si trova nella mia pagina principale e voglio che venga eseguita da un metodo jQuery Ajax.utilizzando i metodi web con le pagine master

Ho un po 'codice come questo al 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 nella pagina master

<div id="test">Click here for the time.</div> 
codice

Asp.Net dietro a mio Maestro VB

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

Curre nte me nte questo non funziona a meno che non mi muovo il metodo web alla pagina Default.aspx VB

C'è un modo per cambiare questa parte

url: "Default.aspx/GetDate", 

Per utilizzare la funzione di pagina master?

Ho provato a cambiare a

url: "template.master/GetDate", 

Ma questo mi dà un errore 404

Tutte le idee?

Grazie in anticipo

risposta

9

Il codice webmethod non possono risiedere nel codebehind per la vostra pagina master.

Ho trovato più semplice includere un servizio Web o un servizio WCF nel mio progetto per cose che dovrò chiamare da più pagine.

EDIT:

Per aggiungere un servizio WCF al progetto: (. Es Agent.svc)

  1. clic destro del progetto
  2. selezionare [servizio WCF] e dargli un nome
  3. impostare il servizio (vedi http://www.codeproject.com/KB/aspnet/jQuery_To_WCF.aspx)

più di un paio di esempi qui sul Stackover flusso ...

Spero che questo aiuti.

+1

+1 basta aggiungere un servizio WCF Ajax abilitato per questo – Erix

+0

io non sono del tutto sicuro di come fare per l'aggiunta di un servizio WCF nel mio progetto? –

+0

@Jamie Taylor: guarda l'aggiornamento che ho appena aggiunto ... – ShaneBlake

3

Come mettere il webmethod in una classe base?

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

Poi ereditano questa classe da quelle pagine si desidera esporre il WebMethod.

Perdonami per C# e VB misti, non ho familiarità con la sintassi VB.

+2

Se aggiungo una baseclass come faccio a utilizzare la funzione all'interno di quella da AJAX? –

1

È possibile seguire il percorso del metodo di classe base, come indicato in precedenza da Andreas.

Accertarsi che:

  • Il webmethod è statico.
  • Nella chiamata Ajax, modificare dinamicamente l'URL in base alla pagina visualizzata. Qualcosa di simile a questo:

(in Ajax chiamare :)

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

Questa è generalmente una buona metodologia. Tuttavia, per i siti in cui la home page è semplicemente 'http: // example.com /', l'url sarà 'null'. O qualsiasi altro sotto-percorso che non include esplicitamente il documento predefinito. –

Problemi correlati