Chiamate ajax

martedì 14 giugno 2011 - 13.02

Gemini Profilo | Expert

ciao a tutti
come posso richiamare con ajax o jquery una funzione presente nel file asp.cs?
Grazie mille

Gluck74 Profilo | Guru

Ciao,
è possibile richamare funzioni che stanno nel code behind di una pagina trasformandole in PageMethods.
Naturalmente nella pagina deve essere presente uno ScriptManager che crea un così detto Proxy lato client in modo da richamare la funzione tramite istruzione JavaScript.
Gli accorgimenti da seguire sono:
1 - Scriptmanager con proprietà EnablePageMethods="true"
2 - La funzione nel codebehind deve essere static
3 - La funzione deve avere assegnati due attributi: WebMethod e ScriptMethod
4 - Nel javascript la funzione deve essere chiamata utilizzando l'oggetto (il proxy) PageMethods

Ecco un semplice esempio:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

using System; namespace WebApp_ProveForum { public partial class usePageMethods : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } [System.Web.Services.WebMethod] [System.Web.Script.Services.ScriptMethod] public static string writeLabel() { return "You have clicked the button"; } } }

Questa è una chiamiamola "scoriciatoia". La prassi vuole che, per situazioni più complesse e scalabili, invece di usare i metodi all'interno di una pagina, si utilizzi un webservice che racchiude tutte le funzionalità da utilizzare tramite ajax. Ma questa è un'altra storia........

Ciao

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

Gemini Profilo | Expert

Ciao e grazie per la risposta molto chiara
Un'altra domanda se posso.
Il mio problema è questo: sto cercando di modificare un jquery per l'upload multiplo e dopo l'upload delle immagini e il loro ridimensionamento, vorrei aggiornare un repeater che visualizza le foto. L'esempio che ho trovato richiama un file ashx che esegue l'upload.
1-E' possibile richiamare dal file ashx una funzione che carica il repeater nella pagina?
2-E' possibile richiamare questa funzione da ajax?
Grazie

Gluck74 Profilo | Guru

>Ciao e grazie per la risposta molto chiara
>Un'altra domanda se posso.

NO!!!
.... hi hi hi, scherzo

>Il mio problema è questo: sto cercando di modificare un jquery
>per l'upload multiplo e dopo l'upload delle immagini e il loro
>ridimensionamento, vorrei aggiornare un repeater che visualizza
>le foto. L'esempio che ho trovato richiama un file ashx che esegue
>l'upload.

Mi suona strano. Solitamente gli handler (file .ashx) servono per elaborare richieste verso il server. ovvero legare al tipo di file l'handler specifico.
Non l'ho mai visto per gare upload... mi daresti il link dell'esempio?

>1-E' possibile richiamare dal file ashx una funzione che carica
>il repeater nella pagina?
>2-E' possibile richiamare questa funzione da ajax?

Come detto sopra, mi suona strano. Secondo me no.
Ma vorrei prima vedere l'esempio per capire meglio.

>Grazie


____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

Gemini Profilo | Expert

Ecco l'esempio:
https://github.com/blueimp/jQuery-File-Upload/wiki/jQuery-File-Upload-for-C%23-%28Forms%29

Gluck74 Profilo | Guru

Ho visto l'esempio. CVD a me non funziona su IE. Solo su FF e chrome

Ora ho capito come viene usato il file ashx.
In pratica lo script JQuery fa una chiamata a questo handler in POST, passandogli il file.
L'handler lo salva e poi restituisce nome, tipo e dimensione.
Le animazioni ed il risultato vengono gestite direttamente dallo script.
Puoi modificare in questo modo:
sostituisci la parte finale dello script nella default.aspx con questo codice
buildDownloadRow: function (file) { return $('<tr><td>' + file.name + '<\/td>' + '<td><img style="width:100px;" src="/upload/' + file.name + '" \/><\/td><\/tr>'); }


____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

Gemini Profilo | Expert

Ancora una domanda.
E' possibile far riferimento, in una funzione richiamata da ajax, ad un controllo presente nella pagina(es. textbox ecc)?
Vorrei richiamare un controllo Silverlight mediaplayer e assegnare il file che deve aprire.
Grazie

Gluck74 Profilo | Guru

>Ancora una domanda.
>E' possibile far riferimento, in una funzione richiamata da ajax,
>ad un controllo presente nella pagina(es. textbox ecc)?
>Vorrei richiamare un controllo Silverlight mediaplayer e assegnare
>il file che deve aprire.
>Grazie

parli lato client o lato server?

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

Gemini Profilo | Expert

Scusa, lato client

Gluck74 Profilo | Guru

si certo.
Essendo javascript, tu puoi accedere a tutto il DOM della pagina.
Puoi usare semplice javascript ma anche jquery o altri framework, cercare qualsiasi controllo HTML e modificarlo.
In dettaglio non so per quanto riguarda SilverLight perché non l'ho mai usato.

Ogni controllo ASP.NET nella pagina aspx, viene creato trasformato in controllo HTML nella pagina risultante, con ID che puoi ricavare dalla proprietà ClientID
(asp.net 3.5) oppure in base alla proprietà "ClientIDMode" per asp.net 4

Esempio:
Metti di avere in una pagina una textBox "txtInputEsempio" e di voler cambiare il testo.
Nel codice sotto (molto stupido), faccio semplicemente "ctrlTesto.value = 'Valore messo da ajax';",
ma una chiamata ajax potrebbe leggere da database e scrivere il valore letto.

string testFunction = string.Format(@"function testInutile(idControllo) { var ctrlTesto = $get(idControllo); if (ctrlTesto) ctrlTesto.value = '{1}'; } testInutile({0});", this.txtInputEsempio.ClientID, "Valore messo da ajax"); ClientScript.RegisterClientScriptBlock(this.GetType(), "testCall", testFunction, true);


____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

Gemini Profilo | Expert

Scuami Gluck74 se ti disturbo ancora
sto modificando l'esempio di upload multiplo del link che ti ho dato in precedenza.
Capita qualche volta che quando seleziono più foto mi dia un errore quando eseguo il crop dell'immagine. Penso che non trovi l'immagine.
Può essere che esegua più chiamate asincrone contemporaneamente e non trovi il file?
C'è modo che elabori un file quando ha terminato di elaborare il precedente?
Grazie

Gluck74 Profilo | Guru

mi sto perdendo, per favore, apri un altro posto con questo nuovo argomento.
Ciao

____________
Ricordati di utilizzare il tasto "Accetta" se i nostri consigli ti sono serviti a risolvere il problema.
È il modo per ringraziare chi ti ha aiutato.

Gemini Profilo | Expert

ok
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5