Modal Popup e postback

martedì 13 marzo 2012 - 21.10
Tag Elenco Tags  VB.NET  |  .NET 4.0  |  Windows Server 2008 R2  |  Windows 7  |  Visual Studio 2010  |  CSS 3.0

totti240282 Profilo | Guru

Ciao a tutti , oggi stavo usando una fancybox prima e poi una dialog box con jquery , semplicemente per aprire una finestra modale con dei bottoni e altri controlliper poi effettuare una chiamata lato server per elaborare i dati.

Io vorrei che al click del bottone e quindi in seguito alla chiamata lato server, venisse chiamata una procedura e poi solo al termine di questa venisse chiusa la finestra modale.

Se metto lo script nell onclientclick del bottone la finestra viene chiusa subito , ma la chimata server poi ancora deve finire, se non metto nulla la finestra fancybox si chiude in seguito al postback ma cosi non posso intercettare errori o altre cose.

Come posso fare ?
C'è solo un capitano !!!!!!

Gluck74 Profilo | Guru

Non conoscendo i componenti che hai usato, vado teorizzando.

Per fare quello che ti serve, dovresti fare una chiamata AJAX quando premmi il bottone presente nella modal.
La chiamata AJAX la puoi fare con il metodo che preferisci: WebSevice con ScriptManager o JQuery, non ha importanza. Quello che è rilevante è che il pulsante NON DEVE effettuare il postback.
dunque potrebbe essere una cosa del genere:
<input type="button" ... ... onclick="return chiamaechiudi();" /> <script> function chiamaechiudi() { //codice per effettuare la chiamata AJAX al server //esempio //ScriptProxy.ServerFunction(parametri, onsuccess, onfailure); return false; } function onsuccess() { //codice necessario //chiudi la finestra modale } function onfailure() { //mostra errore //chiudi la finestra modale (oppure no) } </script>

Ti faccio notare le cose importanti nel codice:
- Il bottone richiama "return chiamaechiudi" e la funzione chiamaechiudi ritorna "false", questo impedisce al pulsante di effettuare postback o qualsiasi altra righiesta dal browser verso il server

- la chiamata ajax prevede, oltre ai parametri eventualmente necessari, due handler a altrettente funzioni. Il primo viene usato per lanciare una funzione se la chiamata ajax è andata a buon fine, il secondo viceversa.
da queste due funzioni puoi decidere come e quando chiudere la modale.

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.

totti240282 Profilo | Guru

Molto interessante questa cosa.
ScriptProxy.ServerFunction sarebbe lo script manager ?

praticamente tu usi lo script manager per richiamare funzioni javascript ?
C'è solo un capitano !!!!!!

Gluck74 Profilo | Guru

i nomi che ho utilizzato io sono puramente di esempio.
Dipende dal codice che stai facendo.

Se la funzione lato server è un vero e proprio webservice, lo scriptmanager ti crea u proxy javascript che ti permette di richiamare il tuo codice dal client:
[System.Web.Script.Services.ScriptService] [WebService(Namespace = "http://xmlforasp.net")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class CustomersService : System.Web.Services.WebService { [WebMethod] public Customer[] GetCustomersByCountry(string country) { return Biz.BAL.GetCustomersByCountry(country); } }
<asp:ScriptManager ID="ScriptManager1" runat="server"> <Services> <asp:ServiceReference Path="~/CustomersService.asmx" /> </Services> </asp:ScriptManager>
function GetCustomerByCountry() { var country = $get("txtCountry").value; <namespacecompleto>.GetCustomersByCountry(country, OnWSRequestComplete); }
qui la documentazione completa:
http://www.asp.net/web-forms/tutorials/aspnet-ajax/understanding-asp-net-ajax-web-services


Esite anche la possibilità di utilizzare le PageMethods, che sono dei simil-webService ma costruiti direttamente nel code-behind della pagina aspx.
Sono più facili da creare, se non hai grosse necessità e non hai una struttura complessa del sito.
Devi abilitare le PageMethods, creare un metodo nella pagina con il tag webmethod, richiamarlo da javascript con la parola chiave pagemethods:
<asp:ScriptManager ID="ScriptManager" runat="server" EnablePageMethods="true" />
public partial class ContactUs : System.Web.UI.Page { [WebMethod] public static void SendForm(string name, string email, string message) { ... }
function SendForm() { var name = $get("NameTextBox").value; var email = $get("EmailTextBox").value; var message = $get("MessageTextBox").value; PageMethods.SendForm(name, email, message, OnSucceeded, OnFailed); } function OnSucceeded() { // Dispaly "thank you." $get("ContactFieldset").innerHTML = "<p>Thank you!</p>"; } function OnFailed(error) { // Alert user to the error. alert(error.get_message()); }

____________
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.

totti240282 Profilo | Guru

Mi sto studiando tutto, quindi riepilogando posso usare in questo modo chiamate server lato client ?

Insomma come le chiamate post usando Jquery ?
C'è solo un capitano !!!!!!

Gluck74 Profilo | Guru

si esatto, tu dal client (quindi una normalissima funzione javascript), puoi richiedere dei dati (json/xml) o del semplice HTML ad una funzione sul server (quindi una dll o il codebehind di una pagina).

esempio:
function esegui { PageMethods.getMenùDinamicoPronto(parametro, onSuccess); //restituisce del codice HTML pronto } function onSuccess(ReturnedData) { $get('divContenenteMenu').innerHTML = ReturnedData; }

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.
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