Ciao Sl4ck3r,
prego, i ringraziamenti sono sempre graditi perché sono l'unica "valuta" che compensa il contributo volontario degli utenti della community.
Sl4ck3r ha scritto:
Più riesco ad avvicinarmi al modello "OnClick=EventHandler", meglio mi trovo
Ok, penso che tu possa provare il pacchetto jQuery Unobtrusive Ajax che puoi scaricare da NuGet (o aggiornare, se era già nel tuo progetto).
http://nuget.org/packages/jQuery.Ajax.Unobtrusive/Aggiungi alla pagina sia il riferimento a jQuery sia a jQuery.unobtrusive che trovi nella cartella /Scripts.
In particolare, fai attenzione alla versione di jQuery che usi perché la 1.9 non è ancora supportata da quel pacchetto ma jQuery Mobile potrebbe richiederla. Se la usi, probabilmente dovrai anche includere il plugin
jquery-migrate, che ripristina le funzionalità deprecate nella 1.9.
Inoltre, per abilitarne il supporto, assicurati nel nel nodo configuration/appSettings del tuo web.config ci sia la seguente istruzione:
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
jQuery.Ajax.Unobtrusive ti permette di creare un form i cui valori verranno inviati al server con una richiesta ajax.
In questo esempio trovi il campo "Nome" il cui valore, a seconda del bottone cliccato, verrà inviato all'azione1 o all'azione2 dell'HomeController.
@{using(Ajax.BeginForm(new AjaxOptions{ HttpMethod="Post", OnSuccess="leggiRisultati" })){
<div>Nome: <input type="text" name="nome" value="ciao" /></div>
<input type="submit" value="Esegui azione 1" onclick="javascript: this.form.action='/home/azione1';" />
<input type="submit" value="Esegui azione 2" onclick="javascript: this.form.action='/home/azione2';" />
}
}
Come vedi, i bottoni sono vicini a ciò che chiedevi. Sul loro onclick viene indicato il percorso alla action che dovrà gestire i dati del form.
onclick="javascript:this.form.action='/home/azione2';"
Al click del bottone, l'action del form verrà impostata su (ad esempio) "/Home/azione2". Questa action, dopo aver elaborato i dati, può restituire ciò che vuoi come un JsonResult o una porzione di HTML per aggiornare l'interfaccia. Puoi fare in modo che sia l'action di un
ApiController, se lo preferisci.
Il risultato prodotto dal server sarà poi gestito dalla funzione javascript "leggiRisultati", come indicato nell'opzione OnSuccess.
Tutto questo è integrabile con jQuery Mobile perché, come vedi da questa
pagina dimostrativa, i bottoni dei form restano pur sempre dei semplici <input type="submit", nonostante siano stati decorati con varie classi e data attributes.
Questa era forse la soluzione più vicina alle tue esigenze, facci sapere se funziona.
ciao
Modificato da BrightSoul il 23 aprile 2013 00.44 -