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
ASP.NET 2.0 / 3.5 / 4.0
CustomValidator per controllo esistenza e-mail
martedì 04 marzo 2008 - 16.44
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
ely_bise
Profilo
| Newbie
27
messaggi | Data Invio:
mar 4 mar 2008 - 16:44
Ciao a tutti!
Sono disperata: da pochissimo ho deciso di iniziare ad usare il control toolkit ajax e sto cercando di usare il ValidatorCalloutExtender.
Per controlli normali tutto apposto, funziona, ma per il CustomValidator ho un problema:
Il mio CustomValidator mi serve per eseguire un controllo sul database dell'esistenza della mail inserita dall'utente, così ho aggiunto la funzione lato server per la verifica e fin qui ok, il problema è che dovrei metterla anche lato client (con una funzione javascript) per fare in modo che funzioni correttamente il ValidatorCalloutExtender, ma non ho idea di come fare per la select da db in javascript...in teoria non si può fare... ma non è che ci sono alternative? come posso risolvere questo problema?
Spero tanto che qualcuno possa aiutarmi!!! grazie in anticipo!
<asp:TextBox MaxLength="100" runat="server" ID="TxtEmail" CssClass="contorno" />
<asp:RequiredFieldValidator runat="server" id="RfvEmail" ValidationGroup="OkApp" ControlToValidate="TxtEmail" ErrorMessage="Attenzione! Campo obbligatorio." Text="Attenzione! Campo obbligatorio."
display="None" cssclass="arancio" />
<asp:CustomValidator ID="CvEmail" runat="server" OnServerValidate="CvEmail_ServerValidate" Display="None"
ErrorMessage="L'utente con questa e-mail è già stato inserito." Text="L'utente con questa e-mail è già stato inserito." ValidationGroup="OkApp">
</asp:CustomValidator>
<ajaxToolkit:ValidatorCalloutExtender runat="Server" ID="AjRfvEmail"
TargetControlID="RfvEmail"
HighlightCssClass="validatorCalloutHighlight" />
<ajaxToolkit:ValidatorCalloutExtender runat="Server" ID="AjCvEmail"
TargetControlID="CvEmail"
HighlightCssClass="validatorCalloutHighlight" />
protected void CvEmail_ServerValidate(object source, ServerValidateEventArgs arguments)
{
bool corretto = true;
SqlConnection cnn = null;
SqlCommand cmd = null;
string StrSql;
string Username = TxtEmail.Text.Trim();
cnn = new SqlConnection();
cnn.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnDB"].ConnectionString;
cnn.Open();
// verifica se esiste già un utente con quella mail
StrSql = "select per verifica esistenza";
cmd = new SqlCommand(StrSql, cnn);
SqlDataReader sdr = cmd.ExecuteReader();
if (sdr.Read())
{
// e-mail già utilizzata
corretto = false;
}
sdr.Close();
cnn.Close();
arguments.IsValid = corretto;
}
pozzoli.samuele
Profilo
| Senior Member
219
messaggi | Data Invio:
mer 5 mar 2008 - 12:12
>Ciao a tutti!
>Sono disperata: da pochissimo ho deciso di iniziare ad usare
>il control toolkit ajax e sto cercando di usare il ValidatorCalloutExtender.
>Per controlli normali tutto apposto, funziona, ma per il CustomValidator
>ho un problema:
>Il mio CustomValidator mi serve per eseguire un controllo sul
>database dell'esistenza della mail inserita dall'utente, così
>ho aggiunto la funzione lato server per la verifica e fin qui
>ok, il problema è che dovrei metterla anche lato client (con
>una funzione javascript) per fare in modo che funzioni correttamente
>il ValidatorCalloutExtender, ma non ho idea di come fare per
>la select da db in javascript...in teoria non si può fare...
>ma non è che ci sono alternative? come posso risolvere questo
>problema?
>Spero tanto che qualcuno possa aiutarmi!!! grazie in anticipo!
Il codice... non lo guardo.
Capito il problema.
Io, fossi in te, proverei a fare un web-service che fa il controllo (il codice lo hai già, quindi ci metti 10 secondi). A quel punto fai una chiamata javascript tramite httprequest al webservice, che ti risponde con una sola parola si o no.
Controlli il risultato della risposta e agisci di conseguenza.
Non è difficile, l'ho già fatto molte volte...
L'unica cosa da cui ti metto in guardia è che se un piccione qualsiasi disattiva javascript, il tuo controllo va in jamaica! Ocio, quindi... non ti affidare solo a javascript.
ely_bise
Profilo
| Newbie
27
messaggi | Data Invio:
lun 10 mar 2008 - 17:58
Ciao! Scusa il ritardo, ma ho fatto un pò di prove!
Allora il web service ho trovato come farlo, testato e funziona. Ho creato una Dll con dentro un metodo che mi restituisce true o false in base se esiste l'email inserita! :)
Ora però non ho capito bene come chiamare il tutto da javascript...avresti un esempio chiaro?
Grazie mille
pozzoli.samuele
Profilo
| Senior Member
219
messaggi | Data Invio:
lun 10 mar 2008 - 18:20
Perfetto! Così hai imparato perfettamente quest'arte! Sono molto comodi. Imamgina solo, ad esempio, ad un login centralizzato! Carino, no?
Questo il codice che fa un httprequest e legge la risposta.
Vediamo se riesci a combinare qualcosa o ti serve altro...
****____****
function Funzione()
{
var strURL = 'Indirizzo della pagina, compreso di http:// iniziale (Ovviemente puoi passare dei parametri. Leggendoli direttamente dai campi, magari, con javascript)';
// create a new parser object instance
var objHTTP = new ActiveXObject("microsoft.XMLHTTP");
objHTTP.open('POST',strURL , false);
// and send the request to the server
objHTTP.send(doc);
//risultato.innerText= objHTTP.responseText;
x=objHTTP.responseText;
if (x =='Risultato positivo')
window.navigate("PaginaOk.aspx");
else
risultato.innerHTML =x;
}
</SCRIPT>
var strURL = 'Indirizzo della pagina, compreso di http:// iniziale';
var objHTTP = new ActiveXObject("microsoft.XMLHTTP");
objHTTP.open('GET',strURL , false);
objHTTP.send();
stringa=objHTTP.responseText
****____****
In stringa, ti ritrovi il testo ritornato dal webservice.
Ti cosiglio quindi di fare un response.clear e un return. In questo modo, hai in uscita solo il codice necessario.
Se hai problemi, fammi sapere!
ely_bise
Profilo
| Newbie
27
messaggi | Data Invio:
mar 11 mar 2008 - 12:29
Ciao!! Eccomi qua!
Sto provando ora ad implementare la parte di javascript in questo modo per vedere se intanto si blocca l'esecuzione e comunica l'errore:
<script type="text/javascript" language="javascript">
function ControllaMail(source, args){
args.isValid = false;
}
</script>
legato poi ad un castomvalidator:
<asp:CustomValidator ID="CvEmail" runat="server" OnServerValidate="CvEmail_ServerValidate" Display="None" ClientValidationFunction="ControllaMail"
ErrorMessage="L'utente con questa e-mail è già stato inserito." Text="L'utente con questa e-mail è già stato inserito." ValidationGroup="OkApp">
</asp:CustomValidator>
Mi da però errore: Eccezione di protezione, così ho cambiato il web.config e messo così:
<securityPolicy>
<trustLevel name="Full" policyFile="internal" />
<trustLevel name="High" policyFile="web_hightrust.config" />
<trustLevel name="Medium" policyFile="web_mediumtrust.config" />
<trustLevel name="Low" policyFile="web_lowtrust.config" />
<trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
</securityPolicy>
<trust
level="Full"
originUrl=""
processRequestInApplicationTrust="true" />
ma non funziona ancora...
Ti è già capitato questo errore?
Poi volevo chiederti un'altra cosa: non ho capito bene i meccanismi dall'esempio che mi hai mandato...io non devo passare da nessuna parte il nome della dll e il metodo da invocare lato javascript? come può funzionare?
Sono proprio out su questo argomento...sigh!!!
grazie mille intanto della disponibilità e dell'aiuto, davvero gentile!!!
pozzoli.samuele
Profilo
| Senior Member
219
messaggi | Data Invio:
mar 11 mar 2008 - 12:41
>Ciao!! Eccomi qua!
>Sto provando ora ad implementare la parte di javascript in questo
>modo per vedere se intanto si blocca l'esecuzione e comunica
>l'errore:
>
> <script type="text/javascript" language="javascript">
> function ControllaMail(source, args){
> args.isValid = false;
> }
> </script>
>
>legato poi ad un castomvalidator:
><asp:CustomValidator ID="CvEmail" runat="server" OnServerValidate="CvEmail_ServerValidate"
>Display="None" ClientValidationFunction="ControllaMail"
>ErrorMessage="L'utente con questa e-mail è già stato inserito."
>Text="L'utente con questa e-mail è già stato inserito." ValidationGroup="OkApp">
> </asp:CustomValidator>
Quindi, fino a qui, non ci sono problemi, giusto?
>Mi da però errore: Eccezione di protezione,
Aspè, aspè... Eccezione di protezione?!?!? Strano! Se funzionava prima...Non fai nessuna cosa pericolosa!
> così ho cambiato
>il web.config e messo così:
> <securityPolicy>
> <trustLevel name="Full" policyFile="internal" />
><trustLevel name="High" policyFile="web_hightrust.config"
>/>
><trustLevel name="Medium" policyFile="web_mediumtrust.config"
>/>
><trustLevel name="Low" policyFile="web_lowtrust.config" />
><trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
> </securityPolicy>
> <trust
> level="Full"
> originUrl=""
> processRequestInApplicationTrust="true" />
>
>ma non funziona ancora...
Ti è già capitato questo errore?
Sinceramente mai! Mi spiace!
>Poi volevo chiederti un'altra cosa: non ho capito bene i meccanismi
>dall'esempio che mi hai mandato...io non devo passare da nessuna
>parte il nome della dll e il metodo da invocare lato javascript?
Direi che, semplicemente, tu fai una richiesta ad un pagina.
Il webservice, lo puoi invocare tramite url.
E' l'url, il riferimento alla dll e ai parametri da passare!
>come può funzionare?
(Risposto poco sopra...
)
>Sono proprio out su questo argomento...sigh!!!
Guarda, la prima volta che ci ho sbattuto il naso (aka: me l'hanno chiesto per lavoro) e sapevo già comportarmi abbastanza bene con i webservice, ci ho messo 3 giorni!
>grazie mille intanto della disponibilità e dell'aiuto, davvero
>gentile!!!
E tu una perfetta corrispondente! Davvero! Complimentoni per come affronti i problemi! BRAVISSIMA!
Altri richiedono codice pronto e magari nel proprio linguaggio di sviluppo perchè altrimenti tradurlo si fa fatica...
Dicevamo quidi, riassumendo:
1- Mi spiace. Errori di protezione non me ne sono capitati. Non saprei proprio come aiutarti. Di solito login e memorizzazione profili etc etc, siccome mi servono cose strane, me li faccio a manina, usando le session.
2- Per richiamare la dll, richiami un url. L'url può essere di una pagina aspx che richiama il webservice, se sei più commoda, o direttamente il webservice:
3- I parametri (ad es l'e-mail) li passi come parametri della querystring.
Faccio una veloce ricerca su come passare i parametri direttamente al webservice (adesso non l'ho perfettamente presente) e ti rispondo!
Buonissima giornata e buon lavoro!
pozzoli.samuele
Profilo
| Senior Member
219
messaggi | Data Invio:
mar 11 mar 2008 - 12:54
Eccolo qua...
Articolo della concorrenza, ma pare molto ben fatto.
Una guida molto completa su come funziona.
Anche senza l'http request, che magari è meglio...
Dimenticato il link... Sob...
http://www.guru4.net/articoli/webservice-introduzione/
Mi sono accorto però, che lo fa con codice lato server. Quindi dovresti passare da una paginetta di appoggio, molto rapida da fare, che prendere i / il parametro da querystring e chiama il servizio. (mi pare proprio di aver fatto così, quella volta!)
Poi, ottenuto il response dal servizio, compili la risposta facendo:
response.clear
response.write(risposta)
response.end
Questo ti fa tornare solo la risposta al client!
Tienimi aggiornato!
ely_bise
Profilo
| Newbie
27
messaggi | Data Invio:
mer 12 mar 2008 - 18:17
Ciao di nuovo!
L'articolo l'avevo trovato anch'io per fare il web service, molto utile!
Ce l'ho fattaaaa!!!
Grazie mille...sono contentissima, ora spero di non avere intoppi nel spostare il progetto!!!
Una sudata comunque:
- il problema dell'eccezione l'ho risolto spostando il progetto in locale ed eseguendolo da locale...poi vedremo quando pubblico come va...
- per quanto riguarda la funzione javascript non mi andava nemmeno prima nella versione semplice che restituiva solo la validazione negata, ho dovuto sostituirla con una equivalente in vbscript...(e qua vorrei dire che la cosa mi sembra assurda...spero funzioni per tutti i browser...)
- venendo invece al meccanismo di interazione web service e vbscript ho dovuto passare per forza per una pagina aspx che al load chiamasse il metodo per la verifica della mail e restituisse al client la risposta, proprio come dicevi tu
protected void Page_Load(object sender, EventArgs e)
{
testmail verifica = new testmail();
string email = Convert.ToString(Request.QueryString["email"]);
bool emailgiainserita = verifica.EsistenzaMail(email);
Response.Clear();
Response.Write(emailgiainserita);
Response.End();
}
avevo provato anche ad usare direttamente vbscript senza passare per una pagina aspx, ma non mi va proprio, peccato, sia in get che in post, avevo scritto così:
Sub CvEmail_ClientValidate(source, arguments)
dim strURL
dim stringa
dim email
email=arguments.Value
strURL = "http://localhost:3613/devgiardini_locale/webservice/testmail.asmx/EsistenzaMail?email=" & email
set objHTTP = CreateObject("microsoft.XMLHTTP")
objHTTP.open "GET", strURL, false
objHTTP.send
stringa=objHTTP.responseText
msgbox stringa
arguments.IsValid=false
End Sub
In conclusione ecco la funzione funzionante sotto vbscript:
<script language="vbscript">
<!--
Sub CvEmail_ClientValidate(source, arguments)
dim strURL
dim stringa
dim email
email=arguments.Value
strURL = "http://localhost:3613/devgiardini_locale/ChiamataServiceMail.aspx?email=" & email
set objHTTP = CreateObject("microsoft.XMLHTTP")
objHTTP.open "GET", strURL, false
objHTTP.send
stringa=objHTTP.responseText
If stringa="True" Then
arguments.IsValid=false
Else
arguments.IsValid=true
End If
End Sub
' -->
</script>
Grazie ancora per l'aiuto e ho postato il più possibile così magari può essere d'aiuto ad altri!!!
Ciao ciao
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 !