2009-02-23 7 views
24

So che posso chiamare un metodo pagina con jQuery utilizzando la seguente sintassichiamando un metodo di pagina ascx utilizzando jQuery

$.ajax({ 
    type: "POST", 
    url: "Default.aspx/GetDate", 
    data: "{}", 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
    // Replace the div's content with the page method's return. 
    $("#Result").text(msg.d); 
    } 
}); 

Questo funziona per aspx pagine, ma è possibile con ascx pagine? (controlli web)

L'ho provato per circa mezz'ora e dal momento che non riesco a farlo funzionare, mi chiedo se sia persino possibile.

Nota: Giusto per essere chiari, quando provo a chiamare alla pagina ascx io sono aggiornando l'URL in jQuery :)

risposta

26

No, perché i controlli ascx non rappresentano un URL reale a cui è possibile accedere da un computer client. Sono puramente server-side pensati per incorporare altre pagine.

Ciò che si potrebbe desiderare di fare è semplicemente avere una pagina aspx che fornisce lo stesso frammento di html che si ha attualmente nel file ascx. Una pagina aspx non deve necessariamente fornire un documento html completo (< html> < corpo> ecc.), Può solo rendere il controllo utente che ti interessa.

Usiamo questa tecnica tutto il tempo con il plugin ingrid, che richiede un url di callback per i contenuti della tabella.

+0

Aggiungo che il modo in cui viene fornito lo snippet consiste nell'includere il controllo sulla pagina piuttosto che duplicare il codice. –

+0

Se il controllo viene utilizzato anche lato server, sono assolutamente d'accordo. Tuttavia, se lo scopo è puramente da utilizzare come callback jQuery, e il controllo non è mai usato in linea un'altra pagina di aspx sul lato server, allora è solo una confusione inutile. In tal caso, basta inserire il codice nella pagina aspx. – Clyde

2

Io non credo che sarà possibile, come controlli utente non sono pensato per essere accessibile esternamente (al di fuori di una pagina). Suggerisco semplicemente di usare un servizio di script (un servizio web).

4

Non penso sia possibile richiedendo direttamente il file ascx, ad es. fornendo "MyControl.ascx" come parametro url a $ .ajax (..). Il file ascx non viene esposto direttamente dal server web.

È possibile, credo, fornire l'URL della pagina di aspx contenente il controllo utente - ad es. se un'istanza di MyControl.ascx vive su MyPage.aspx, è necessario fornire "MyPage.aspx" come parametro url. Sembra che ciò possa vanificare lo scopo per quello che stai cercando di ottenere.

MODIFICA: Ciò che Clyde ha detto di seguito sembra una buona idea. Sto facendo qualcosa di simile me stesso includendo il controllo ascx in una pagina il cui lavoro è più o meno giusto ospitarla per l'accesso dallo script lato client.

+0

Condivide la prima parte qui funzionano? Devo inviare dati JSON a una funzione in un file ascx.cs e preferisco non dover refactoring questo codice ascx e il codice nella sua pagina contenente aspx. –

2

Che dire creare il metodo sulla pagina .aspx che fa ciò che è necessario con le informazioni dal controllo? So che le persone tornano indietro e la quarta su quali controlli dovrebbero contenere o non contenere, ma se il controllo contiene solo proprietà e oggetti, penserei che avere la funzione nella pagina .aspx potrebbe funzionare per voi. Ovviamente ci sarebbero molti compromessi.

1

Vorrei creare un gestore generico (.ashx) che carica il controllo e scrive il codice HTML visualizzato nella risposta.

0

È possibile scrivere il metodo GetDate() in Default.aspx o un altro file aspx e si può chiamare CHE DAL METODO .ASCX FILE.

Es:

In UserControl.ascx:

$.ajax({ 
type: "POST", 
url: "Default.aspx/GetDate", 
data: "{}", 
contentType: "application/json; charset=utf-8", 
dataType: "json", 
success: function(msg) { 
// Replace the div's content with the page method's return. 
$("#Result").text(msg.d); 
} 

});

In Default.aspx.cs:

Public void GetDate() //Public static void { //your code here }

Problemi correlati