Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
HTML, Javascript, CSS, DHTML, XHTML
Lanciare Funzione serverSide da uno script JavaScript
mercoledì 11 giugno 2008 - 12.43
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 12:43
Cari amici, è possibile lanciare una Funzione serverSide tipo: sub MyFunction () da uno script latoClient JavaScript??
Grazie
Riccardo
Ridaria
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 12:59
Si può grazie ad Ajax.NET ed i webmethods.
Si tratta di metodi lato server opportunemente decorati di tipo public. Possono restituire void, semplici variaibli o classe complesse, l'unico vincolo è che siano serializzabili. Io gli ho trovati utilissimi.
PS:Ricorda che sono asincroni.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 13:06
Hai del codice da postarmi?
o un link dove leggere qualcosa?
Grazie
Ridaria
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 14:49
Scusa il ritardo nella risposta, ma sai: cibo, bigliardino... dai un'occhiata qui:
http://msdn.microsoft.com/it-it/library/byxd99hx
(VS.80).aspx
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 14:52
mentre do un occhiata li, bigliardino???????? in pausa pranzo giocate a bigliardino????? se si è una figata!
Ridaria
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 14:55
Ognuno ha i suoi piccoli grandi vizzi
. Andiamo ad un bar qui vicino e per un'oretta ci diamo dentro.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 14:55
grazie per il link, ma ci vorrebbe troppo tempo adesso per studiarmi tutto, non hai un po di codice con una funzione javaScript che mi lanci una beneddetta sub serverside
Grazie
Ridaria
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 15:12
Non posso postartelo perchè materiale aziendale:
Facciamo così:
1) Metti lo scriptManager nella pagina
2) using System.Web.Services; //Reference Fondamentale per la decorazione [WebMethod()]
3) Scrivi questo metodo lato server:
[WebMethod()]
public static string Now()
{
throw new DivideByZeroException();
//return DateTime.Now.ToString();
}
4) Lato client:
function LeggiDataOra()
{
PageMethods.Now(ScriviData, OnError);
}
function ScriviData(result)
{
document.getElementById("RisultatoDataOra").innerHTML = result;
}
function OnError(error, userContext, methodName)
{...}
5) Chiama LeggiDataOra ed al termine della chiamata viene chiamato: Scrivi data quando il metodo viene eseguito correttamente altrimento onError.
Se la tua funzione server ha dei parametri questi devono essere scritti così
PageMethods.NomeFunzioneServer(par1,par2,par3,..., FunzioneDaChiamareQuandoFinito, FunzioneDaChiamareInCasoDiErrore);
Spero ti basti
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 15:45
io ti ringrazio, ci provo, ma volevo dirti che la funzione che devo lanciare ha ad oggetto una serie di azioni sul database, e per la precisione la cancellazione di un record dal DB e la eliminazione di un file di immagine che risiede sempre sul server.
Si può fare ciò oppure posso solo leggere data e ora dal server????
Grazie
Riccardo
Ridaria
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 15:55
La funzione che legge data e ora è solo a titolo di esempio.
La parte interessante della cosa è come fare a far comunicare client e server senza eseguire postback. Una volta sul server puoi fare quello che vuoi, ma ricordati che sei in una funzione statica e non hai postato il viewstate quindi non hai accesso ai controlli. Anche accedere alla Session/application ecc. non è così immediato: devi usare HTTPContext.Current.Session.
Paricolare attenzione ad associare funzioni così potenzialmente dannose ad una chiamata JS. Dovrai prendere tutte le dovute precauzioni di sicurezza.
Come disse Dino Esposito [sua maestà] spiegandoci i webMethods ad un corso (citando SpiderMan) "a grande potere corrisponde grande responsabilità".
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 16:21
mi dice che:
PageMethods is not defined
LeggiDataOra()riccardo.aspx (line 12)
onclick(click clientX=0, clientY=0)riccardo.aspx (line 1)
[Break on this error] PageMethods.Now(ScriviData, OnError);
Ma quel santissimo WebMethod dove lo devo mettere??
Io lo ho messo nella sezione di codice server side della pagina uno spezzone lo vedi qui sotto:
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Drawing.Drawing2D
Imports System.Web.Services
Partial Class Riccardo
Inherits System.Web.UI.Page
Public Shared Function Now() As String
Throw New DivideByZeroException
End Function
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim connString As String = ConfigurationManager.ConnectionStrings("STR_CONN").ConnectionString .... eccccccc
end sub
Ridaria
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 16:28
esattamente dov'era sopra il metodo.
Domanda: ho parlato di decoraizioni di metodi, sai cosa sono?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 16:34
no, purtroppo no questo argomento dei webMetho mi è del tutto sconosciuto ed anche le decorazioni lo sono
Ridaria
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 16:40
Tranquillo:
Per farla molto semplice: Le decorazioni sono informazioni aggiuntive che dai al compilatore sul metodo.
Quella che ho scritto io è in c# in vb dovrebbe essere <WebMethod()> e vanno scritte subito sopra il metodo (in Vb devono essere seguite da _ altrimenti da errore)
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 16:47
UFFFFFFFFFFFFFFFFFFFFFFFFFFF
ti posto il pezzo di script ed il pezzo di codice server side!
<html xmlns="
http://www.w3.org/1999/xhtml"
>
<head runat="server">
<link rel="stylesheet" type="text/css" href="../App_Themes/position.css"/>
<script language ="javascript" type="text/javascript" src ="../javaScript/JScript.js" >
</script>
<script language="javascript" type ="text/javascript" >
function LeggiDataOra()
{
PageMethods.Now(ScriviData, OnError);
}
function ScriviData(result)
{
document.getElementById("RisultatoDataOra").innerHTML = result;
}
function OnError(error, userContext, methodName)
{
//...
}
</script>
Server side:
Imports System.Data
Imports System.Data.SqlClient
Imports System.IO
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Drawing.Drawing2D
Imports System.Web.Services
Partial Class Riccardo
Inherits System.Web.UI.Page
<WebMethod()> _
Public Shared Function Now() As String
Throw New DivideByZeroException
End Function
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim connString As String = ConfigurationManager.ConnectionStrings("STR_CONN").ConnectionString
Dim conn As New SqlConnection(connString)
Dim i As Integer = 0
Dim SqlStr As String = "SELECT nome FROM [RegioniDelMondo]"
Dim dt As New DataTable .............. eccc
end sub
Mi da sempre lo stesso errore:
PageMethods is not defined
LeggiDataOra()riccardo.aspx (line 11)
onclick(click clientX=0, clientY=0)riccardo.aspx (line 1)
[Break on this error] PageMethods.Now(ScriviData, OnError);
Tra un pò scasso la tastriera!
Grazie ancora
Ridaria
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 17:06
ehm... temo di essermi dimenticato un dettaglio.....
devi mettere anche l'attributo EnablePageMethods="true" nello script manager... Scusa me ne dimentico sempre :(
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 17:18
la avevo fatto, trovato in giro da Sorcinelli.
Ma comunque la data non me la visualizza ed al secondo click sul bottone, mi attacca in fondo alla pagina la stessa Pagina, e via di seguito, tipo:
6 click, mi renderizza sei volte la pagina una sotto all'altra..........................
RiccaRDO
Ridaria
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 17:27
ho fatto un alert nella funzione:
function ScriviData(result)
{
document.getElementById("RisultatoDataOra").innerHTML = result;
alert(result)
}
e sai cosa mi ha restituito:
Tutto l'html della Pagina!"!!!!!!
Cosa accade?
Ridaria
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 17:31
aspè hai inserito un asp:button che potrebbe farti il postback?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 17:38
esatto, ci vuole un controllo html classico?
ci provo subito!
Ridaria
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 17:46
messo il button classico html e adesso mi da "Undefined"
Ridaria
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 17:48
No ci vuole di non eseguire il postback
Ovvero se metti un <input type="button"> tutto bene
se usi un <asp:button onclientclick="leggiora();return false;" />
(con il return false eviti il postback.). E' meglio non usare i controlli server quando non servono.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 17:50
Non hai lascito il throw exception dell'esempio (ho visto che lo hai ripostato)?
Hai provato a mettere un breakpoint nella funzione lato server per vedere cosa restituisce?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 17:56
intendi un punto di interruzione, quelli per il debug????????
non posso, lavoro direttamente sul server.
devo togliere il Throw New DivideByZeroException,
e poi che ci azzecca un controllo su operazioni di divisione per zero? se sto leggendo un valore sul server?
Riccardo
Ridaria
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 18:08
Non è un controllo, ma un lancio di eccezione vera e propria. Se hai visto nel codice che ti ho postato c'erano due righe: una restituiva il valore, l'altra un'eccezione. Serviva per mostrare entrame le possibilità. DivisionByZero è stata scelta più o meno a caso, tanto per lanciarne una.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 18:15
ecco cosa ho scritto adesso:
<script language="javascript" type ="text/javascript" >
function LeggiDataOra()
{
PageMethods.Now(ScriviData, OnError);
}
function ScriviData(result)
{
document.getElementById("RisultatoDataOra").innerHTML = result;
alert(result)
}
function OnError(error, userContext, methodName)
{
alert(error)
}
</script>
<script runat="server">
<System.Web.Script.Services.ScriptMethod(), System.Web.Services.WebMethod()> _
Public Shared Function Now() As String
Return "CIAO"
'Throw New DivideByZeroException
End Function
</script>
Mi restituisce undefined.
Il bottone ed il div li ho messi in un updatePanel di uno ScriptManager.
Riccardo
Ridaria
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 18:26
se devi andare via dimmelo che vado anche io, se non risolvo sta cagata non ho altro da fare!!!!!!!!!!!!!!!!!!!!
Ridaria
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 18:28
>ecco cosa ho scritto adesso:
>
><script language="javascript" type ="text/javascript" >
>function LeggiDataOra()
>{
>PageMethods.Now(ScriviData, OnError);
>}
>
>function ScriviData(result)
>{
>document.getElementById("RisultatoDataOra").innerHTML = result;
>alert(result)
>}
>
>function OnError(error, userContext, methodName)
>{
>alert(error)
>}
>
></script>
>
><script runat="server">
><System.Web.Script.Services.ScriptMethod(), System.Web.Services.WebMethod()>
>_
> Public Shared Function Now() As String
> Return "CIAO"
>
> 'Throw New DivideByZeroException
>
> End Function
></script>
>
>Mi restituisce undefined.
>
>Il bottone ed il div li ho messi in un updatePanel di uno ScriptManager.
>
>Riccardo
>Ridaria
Perchè un updatepannel? toglilo.
Hai inserito un div con id="RisultatoDataOra"?
System.Web.Script.Services.ScriptMethod() ? Perchè?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 18:43
Non FUNZIONA!!!!!!!!!
Avremo fatto prima se mi avessi inviato un pezzo di codice TUO funzionante!
Ridaria
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 18:50
Ti ho spiegato che non posso e ti ho mandato tutti i pezzi di codice necessari. Mi sembra di essere qui ad aiutarti nello sviluppo passo passo.
Continua a darti undefined?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
mer 11 giu 2008 - 18:57
si continua a darmi Undefined, ho messo il bottone ed il div fuori dall'update panel:
<input id="Button7" type="button" value="button" onclick="ScriviData()" /><br />
<div id="RisultatoDataOra" style="border-color:Fuchsia ; border-width :medium " >data:
</div>
e questo è lo script:
<script runat="server">
<System.Web.Script.Services.ScriptMethod(), System.Web.Services.WebMethod()> _
Public Shared Function Now() As String
Return "CIAO"
'Throw New DivideByZeroException
End Function
</script>
<script language="javascript" type ="text/javascript" >
function LeggiDataOra()
{
PageMethods.Now(ScriviData, OnError);
}
function ScriviData(result)
{
document.getElementById("RisultatoDataOra").innerHTML = result;
alert(result)
}
function OnError(error, userContext, methodName)
{
alert(error)
}
</script>
ho messo:
<System.Web.Script.Services.ScriptMethod(), System.Web.Services.WebMethod()> _
perché se metto solo: <WebMethod()> _ me lo sottolinea blu.
Cmq Grazie, speriamo di riuscirci.
Ridaria
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 19:04
Puoi tradurre "me lo sottolina blu" con il messaggio di errore?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
mer 11 giu 2008 - 19:09
Vado a casa sono fuso
.
Ci sentiamo domani. Se qualcuno stasera legge e può aiuti pure
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
gio 12 giu 2008 - 09:01
le ho provate tutte, ma scusa se tu mi prendio i pezzi di codice che usi, ci toghli ogni riferimento a chi o che cosa, lo rendi puro, così che io non sappia da dove cavolo arriva, cosa cambia ?
Cmq ciò che mi stai dicendo deriva da ciò che hai già scritto no???
Grazie
riccardo
Ridaria
ridaria
Profilo
| Expert
905
messaggi | Data Invio:
gio 12 giu 2008 - 10:01
Risolto, non so se il tuo codice postatomi ieri era completo, ma ho seguito gli esempi presi su
http://asp.net/AJAX/Documentation/Live/tutorials/ExposingWebServicesToAJAXTutorial.aspx
e ho risolto. L'esempio che ho preso "è un pò diverso dai tuoi suggerimenti", c'è un file .asmx da impostare e richiamare questo file dallo script manager etcccc,
Comunque, Grazie infinite per l'attenzione.
Riccardo
Ridaria
Wamba
Profilo
| Expert
722
messaggi | Data Invio:
gio 12 giu 2008 - 10:05
Quello che hai usato è un WebServices al posto di un WebMethod. Sono [sempre semplificando] più o meno la stessa cosa. La differenza fondamentale è che i WebMethod funzionano solo all'interno della pagina e danno margini di sicurezza maggiori.
Sono contento che tu abbia risolto.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com
Torna su
Stanze Forum
Elenco Threads
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 !