Evento abbandono textbox

martedì 16 ottobre 2007 - 23.53

F@bri Profilo | Junior Member

Ciao a tutti, ho la seguente necessità e non so come gestirla.
Da una pagina realizzata in asp.net 1.1 ho un controllo textbox ed un successivo tasto per il pagamento attraverso paypal (incluso nel form che genera il codice per il post dei dati).
Vorrei controllare che prima di premere il tasto di pagamento paypal l'utente abbia inserito un valore nella textbox (la propria mail).
Come posso fare? Esiste un evento che viene intercettato quando abbandono una textbox e che controlli il contenuto della stessa prima di passare alle pagine di pagamento?
Grazie.

alx_81 Profilo | Guru

>Ciao a tutti
ciao!

> ho la seguente necessità e non so come gestirla.
>Da una pagina realizzata in asp.net 1.1 ho un controllo textbox
>ed un successivo tasto per il pagamento attraverso paypal (incluso
>nel form che genera il codice per il post dei dati).
>Vorrei controllare che prima di premere il tasto di pagamento
>paypal l'utente abbia inserito un valore nella textbox (la propria
>mail).
>Come posso fare? Esiste un evento che viene intercettato quando
>abbandono una textbox e che controlli il contenuto della stessa
>prima di passare alle pagine di pagamento?
Ti consiglio di utilizzare i validation controls di asp.net.
Due tipi fanno al caso tuo:

RegularExpressionValidator, che ti consente non solo di controllare se è stato inserito un valore in una textbox, ma anche di fare controlli formali sul contenuto (ad es. se è effettivamente stata inserita una email nel campo).

RequiredFieldValidator, che ti obbliga ad iserire il valore in un particolare controllo (la tua textbox ad esempio).

Ecco come si usano:
Innanzitutto dipende dove vuoi il messaggio d'errore. Se ti basta a fianco del campo, basta affiancare alla tua textbox (che chiameremo TextBox1) il seguente controllo:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

oppure il RegularExpressionValidator:
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

l'espressione regolare indicata controlla se il valore inserito nella TextBox1 è effettivamente una email.

Per maggiori dettagli leggi i seguenti link:

RequiredFieldValidator control
http://msdn2.microsoft.com/en-us/library/5hbw267h.aspx

RegularExpressionValidator control
http://msdn2.microsoft.com/en-us/library/eahwtc9e.aspx

spero possa esserti di aiuto
ciao!


>Grazie.

Alx81 =)

http://blogs.dotnethell.it/suxstellino

F@bri Profilo | Junior Member

Ciao Alx_81 e grazie per la risposta.
Il problema è che il required filed validator non viene invocato o meglio non segnala la mancanza del dato cliccando sul pulsante del form di paypal.

Nella pagina ho due form: quello di aspnet (runat=server) e quello di paypal.
Ahimé avevo già provato ma nulla...

Immagina la webform in questo modo:
- una casella mail (obbligatoria, inserita nel form asp.net per controllare la correttezza formale della mail)
- il modulo (form) di paypal con relativo pulsante per il passaggio dei dati ai server paypal.

Io devo controllare che l'utente abbia inserito la mail prima di passare i dati a paypal.
Esiste un evento che viene generato quando il focus esce dalla textbox?
O un qualche evento associato alla pagina da poter generare per controllare il contenuto della textbox (mail)?

Grazie ancora

Ciaoooo

alx_81 Profilo | Guru

>Ciao Alx_81 e grazie per la risposta.
>Il problema è che il required filed validator non viene invocato
>o meglio non segnala la mancanza del dato cliccando sul pulsante
>del form di paypal.
>Nella pagina ho due form: quello di aspnet (runat=server) e quello
>di paypal.
>Ahimé avevo già provato ma nulla...
>Immagina la webform in questo modo:
>- una casella mail (obbligatoria, inserita nel form asp.net per
>controllare la correttezza formale della mail)
>- il modulo (form) di paypal con relativo pulsante per il passaggio
>dei dati ai server paypal.
>Io devo controllare che l'utente abbia inserito la mail prima
>di passare i dati a paypal.
>Esiste un evento che viene generato quando il focus esce dalla
>textbox?
Se metti la proprietà Display="dynamic" otterrai il messaggio dinamico di errore.
Se cerchi di cambiare il testo, ma poi lo cancelli, appena il textbox perde il fuoco otterrai il messaggio di errore.
Se non inserisci il valore, alla pressione del pulsante, compare il messaggio.
E il RequiredFieldValidator funziona proprio così
Che ne dici di postare il tuo codice che vediamo?

Comunque credo che a te serva anche il regExpValidator per il controllo formale.
>
>Grazie ancora
di nulla!

Alx81 =)

http://blogs.dotnethell.it/suxstellino

F@bri Profilo | Junior Member

ecco il codice...
Spero sia comprensibile

Come noterai nella pagina ho due form uno asp.net (runat=server) per poter utilizzare il validatore della mail, l'altro per inviare i dati ai server paypal.
Ovviamente volendo utilizzare solo un form (quello di paypal) inserendo l'attributo runat=server non funziona più la parte di invio dati a paypal.

...

<form id="Form1" method="post" runat="server">(qui apro il form asp.net)
Insert your mail and click on next<br>
<asp:textbox id="txtMail" runat="server" CssClass="Textbox" MaxLength="100" Width="200px"></asp:textbox>
<asp:regularexpressionvalidator id="revMail" runat="server" CssClass="MessaggioRosso" ErrorMessage="Format mail not correct" Display="Dynamic" ControlToValidate="txtMail" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"></asp:regularexpressionvalidator>
<asp:RequiredFieldValidator id="rfvMail" runat="server" CssClass="MessaggioRosso" ControlToValidate="txtMail"
Display="Dynamic" ErrorMessage="Insert your mail"></asp:RequiredFieldValidator>
</form> (qui chiudo il form asp.net)

<!-- CODICE PULSANTE PAGAMENTO -->
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">(qui apro il form paypal)
<input type="hidden" value="_xclick" name="cmd"> <input type="hidden" value="mail@hotmail.it" name="business">
<input type="hidden" value="product" name="item_name"> <input id="amount" type="hidden" name="amount" runat="server">
<input type="hidden" name="buyer_credit_promo_code"> <input type="hidden" name="buyer_credit_product_category">
<input type="hidden" name="buyer_credit_shipping_method"> <input type="hidden" name="buyer_credit_user_address_change">
<input type="hidden" value="0" name="no_shipping"> <INPUT type="hidden" value="http://www.mysite.com/thank-you.aspx" name="return">
<INPUT type="hidden" value="http://www.mysite.com/bye.aspx" name="cancel_return">
<input type="hidden" value="1" name="no_note"> <input type="hidden" value="EUR" name="currency_code">
<input type="hidden" value="IT" name="lc"> <input type="hidden" value="PP-BuyNowBF" name="bn">
<input type="image" alt="Pay with PayPal."
src="http://www.mysite.com/img/pay.jpg" border="0" name="submit"> <IMG height="1" alt="" src="https://www.paypal.com/it_IT/i/scr/pixel.gif" width="1" border="0">
</form>(qui chiudo il form paypal)
<!-- FINE CODICE PULSANTE PAGAMENTO -->
...

Grazie per il supporto che mi stai dando

0v3rCl0ck Profilo | Guru

Ciao,

Prova a dichiarare la form di paypal con un id:

<form id="frmPaypal" action="https://www.paypal.com/cgi-bin/webscr" method="post">

Successivamente, sul pulsante di pagamento, metti una funzione javascript che aggiunge l'email e gli altri paramentri dell'utente alla form di paypal e come ultima istruzione lancia il Submit della form document.getElementById("frmPaypal").submit()


Enjoy It


http://blogs.dotnethell.it/Regulator/

F@bri Profilo | Junior Member

Grazie 0v3rCl0ck ma continuo ad avere dei problemi.
Le operazioni da te consigliate sono 3:

1 assegna un id al form di paypal -> FATTO

2 Successivamente, sul pulsante di pagamento, metti una funzione javascript che aggiunge l'email e gli altri paramentri dell'utente alla form di paypal -> non ho capito

3 come ultima istruzione lancia il Submit della form document.getElementById("frmPaypal").submit() -> FATTO
in questo modo (riprendendo dal codice precedente):
<input type="image" alt="Pay with PayPal." src="http://www.mysite.com/img/pay.jpg" border="0" name="submit" onclick='document.getElementById("frmPaypal").submit()'>

Non avendo capito il secondo suggerimento può essere che ancora non funzioni per tale mancanza, ti va di indicarmelo magari riprendendo il codice?

Grazie


0v3rCl0ck Profilo | Guru

>Grazie 0v3rCl0ck ma continuo ad avere dei problemi.
>Le operazioni da te consigliate sono 3:
>
>1 assegna un id al form di paypal -> FATTO

BENE

>
>2 Successivamente, sul pulsante di pagamento, metti una funzione
>javascript che aggiunge l'email e gli altri paramentri dell'utente
>alla form di paypal -> non ho capito

Effettivamente mi sono spiegato male...se non sbaglio il campo txtEmail deve essere inviato a paypal e per poterglielo inviare tu hai bisogno di inserirlo nel form che gli stai spedendo. Per fare questo devi aggiungere un altro campo hidden con il nome definito da paypal (forse sempre txtEmail), dargli anche ad esso un id tipo "txtInputEmail" e poi aggiungere un istruzione prima del submit della form così:

document.getElementById("txtInputEmail").value = document.getElementById("txtEmail").value;

Controlla che la textbox txtEmail generata nel codice html da .NET abbia come id effettivamente txtEmail, ma comunque non essendo dentro ad altri controlli non dovrebbe avere alcun prefisso.

Questo diciamo che è il modo di farlo tutto lato client senza postback, altrimenti puoi farlo con il postback e quindi alimentare il campo hidden da codice semplicemente mettendo l'hidden interessato a runat=server, ma poi per inviare il form non dovresti più mettere la funzione di submit sul pulsante (che diventerebbe un pulsante lato server), ma invece andrebbe scritta la riga di codice con il submit, subito dopo la form.

>
>3 come ultima istruzione lancia il Submit della form document.getElementById("frmPaypal").submit()
>-> FATTO
>in questo modo (riprendendo dal codice precedente):
><input type="image" alt="Pay with PayPal." src="http://www.mysite.com/img/pay.jpg"
>border="0" name="submit" onclick='document.getElementById("frmPaypal").submit()'>

BENONE

>
>Non avendo capito il secondo suggerimento può essere che ancora
>non funzioni per tale mancanza, ti va di indicarmelo magari riprendendo
>il codice?
>
>Grazie

PREGO

>
>
>

http://blogs.dotnethell.it/Regulator/

F@bri Profilo | Junior Member

Ho seguito alla lettera le tue istruzioni inserendo il campo hidden id:
<input type="hidden" id="txtInputEmail"> (all'interno del form di paypal)

ho aggiunto all'evento del pulsante il controllo:
<input type="image" alt="Pay with PayPal." src="http://www.mysite.com/img/pay.jpg" border="0" name="submit" onclick='document.getElementById("txtInputEmail").value = document.getElementById("txtEmail").value; document.getElementById("frmPaypal").submit()'>

ma nulla, pur non inserendo la mail viene inviato il post a paypal.

Nota a margine: non devo inviare la mail a paypal, a loro non serve, serve a me perché devo memorizzarlo in una tabella.

Praticamente come funziona?
l'utente arriva a questa pagina e prima di inviare il dato a paypal devo ricavare la mail e memorizzarla nel db, devo essere certo che l'utente abbia valorizzato il campo mail per poter successivamente, dopo aver effettuato il pagamento, inviare IO una comunicazione a lui.

E se provassimo lato server?

0v3rCl0ck Profilo | Guru

Allora devi per forza farlo lato server, perchè prima di inviare i dati devi salvarti l'email...se non devi aggiungere nient'altro al form di paypal, per fare una semplice prova, aggiungi un controllo literal appena dopo il form di paypal, nel codice dopo avere validato e inserito nel db l'email, scrivi nel literal il javascript per inviare i dati a paypal:

Me.litRunPaypal.Text = "<script language='javascript'>document.getElementById("frmPaypal").submit()</script>"

Intanto guarda se funziona così, poi si possono fare cose carine, come una pausa prima di inviare per fargli vedere un messaggio in cui dici all'utente che il pagamento è stato preso in carico dal sito e che si sta per essere reindirizzati al sito di paypal, per il pagamento. Poi per inserire il codice js in maniera più elegante ed utilizzare i metodi dell'FX, potresti utilizzare i metodi: RegisterStartupScript o RegisterClientScriptBlock.


http://blogs.dotnethell.it/Regulator/

F@bri Profilo | Junior Member

Ciao 0v3rCl0ck, non ho ancora provato la tua ultima soluzione ma mi domandavo se secondo te c'era il modo di fare tutto in un unico click.
Inserisco la mail, faccio click sul pulsante di pagamento ed in sequenza:
1. controllo il contenuto della textbox (mail)
2. inserisco nel db la mail
3. effettuo il post verso i server paypal.

Se hai qualche idea è bene accetta
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5