650 messaggi dal 21 marzo 2008
Ciao a tutti
utilizzo questo plugin per caricare file con ajax:
http://lagoscript.org/jquery/upload
Sto cercando di utilizzare questa dll anche per la validazione delle immagini. Il problema è che questo plugin è asincrono e appena clicco un tasto salva oltre a richiamare la funzione per il controllo, parte anche il postback della pagina.
Vorrei trovare qualche altro plugin che mi permetta di fare la stessa cosa, ma in maniera sincrona.

Questo è il codice che ho scritto:
function CheckDati(e) {
var errore = false;
var msg_error = '';
$('#dvColori').upload('../../Handler/myFileUpload.ashx?type=colori',
{ 'id': $('#<%= hdIdPlantare.ClientID %>').val(), 'colori': $("#<%= ddlLinea.ClientID %>").find(':selected').attr("colori") },
function (response) {
var result = response.substring(response.indexOf('{'), response.indexOf('}') + 1);
var myObject = eval('(' + result + ')');

if (myObject.error != '') {
alert(myObject.error);
e.preventDefault();
}
},
'text');
}

Grazie mille
5.610 messaggi dal 09 febbraio 2002
Contributi
ciao,
se il metodo .upload fosse sincrono si creerebbe un problema per l'utente perché vedrebbe la pagina web "congelata" per l'intera durata dell'operazione.
E' un bene che il metodo sia asincrono, così tu nel frattempo puoi mostrare all'utente un testo che lo invita ad attendere, magari accompagnato da una gif animata di caricamento tipo queste.

Dovresti seguire questi passi:
  • Tra le prime istruzioni della funzione CheckDati, mettine una che ti disabiliti il bottone o che lo faccia sparire (in modo che l'utente non possa premerlo ripetutamente). Poi fai comparire un messaggio di caricamento che lo invita ad attendere. Se invece vuoi che, nel frangente, non possa cliccare proprio nient'altro, allora puoi usare il plugin BlockUI, suggerito da totti240282 in un altro thread.
  • Alla fine della funzione CheckDati, metti un return false; in modo che il postback venga cancellato (<- non vedo come viene invocata CheckDati quindi non posso garantirti che restituire false ti annullerà il postback);
  • Leggi la risposta che ti arriva dalla richiesta ajax e sblocca (o fai riapparire) il bottone. Se la validazione ha avuto buon esito, scatena il submit del form. Attenzione che a questo secondo submit, se CheckDate va di nuovo in esecuzione, deve rendersi conto che la validazione è già stata fatta e che quindi può restituire true


ciao

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
650 messaggi dal 21 marzo 2008
Grazie mille
ho pensato ad un'altra soluzione: utilizzare un controllo nascosto che mi esegue il postback della pagina.
Quindi al controllo visibile associo solo il controllo delle immagini se non ci sono errori richiamo l'evento click del controllo nascosto
Modificato da Gemini78 il 20 febbraio 2012 10.16 -
650 messaggi dal 21 marzo 2008
Piccolo problema.
Quando richiamo l'evento click del tasto nascosto ed eseguo il postback non salva nessun valore che ho inserito nei campi. Se invece seguo tutto in debug mi salva i dati delle textbox, ma trovo a null il PostedFile.
Come mai?
Questo è quello che faccio:
<a id="lbSalva" style="cursor:pointer;">
<img src="../immagini/save.png" alt="Salva" title="Salva" />
</a>
<asp:Button ID="btSalva" OnClick="Salva" ValidationGroup="vgDati" runat="server"></asp:Button>

<div id="dvColori">
<asp:Repeater ID="rptColori" runat="server" OnItemDataBound="rptColori_ItemDataBound">
<ItemTemplate>
<asp:Panel ID="dvColore" runat="server">
<div class="row" style="margin-bottom: 5px;">
<div class="row_titolo">
<asp:Literal ID="lColore" runat="server" />
<asp:HiddenField ID="hdIdColore" Value="0" runat="server" />
</div>
<div class="row_campo" style="width: 470px;">
<div style="float: left; width: 200px;">
<asp:FileUpload ID="fuImmagine" runat="server" CssClass="testo" />
</div>
<asp:Panel ID="dvImmagine" runat="server">
<div style="float: left; margin-left: 10px; width: <%= Costanti.PLANTARI_WIDTH_SMALL %>px;">
<asp:Image ID="imgImmagine" runat="server" />
</div>
</asp:Panel>
</div>
</div>
</asp:Panel>
</ItemTemplate>
</asp:Repeater>
</div>

<script type="text/javascript">
function CheckDati(e, op) {
var errore = false;
var msg_error = '';
$('#dvColori').upload('../../Handler/myFileUpload.ashx?type=coloriplantari',
{ 'id': $('#<%= hdIdPlantare.ClientID %>').val(), 'colori': $("#<%= ddlLinea.ClientID %>").find(':selected').attr("colori") },
function (response) {
var result = response.substring(response.indexOf('{'), response.indexOf('}') + 1);
var myObject = eval('(' + result + ')');

if (myObject.error != '') {
alert(myObject.error);
e.preventDefault();
}
else {
if (op == 'salva') {
$('#<%= btSalva.ClientID %>').show();
$('#<%= btSalva.ClientID %>').click();
$('#<%= btSalva.ClientID %>').hide();
}
else if (op == 'applica') {
$('#<%= btApplica.ClientID %>').show();
$('#<%= btApplica.ClientID %>').click();
$('#<%= btApplica.ClientID %>').hide();
}
}
},
'text');
e.preventDefault();
}

$(function () {
$('#lbSalva').click(function (e) { return CheckDati(e, 'salva') });
$('#lbApplica').click(function (e) { return CheckDati(e, 'applica') });

$('#<%= btApplica.ClientID %>').hide();
$('#<%= btSalva.ClientID %>').hide();
}
);
</script>
A questo punto esegue il postback, esegue le query, ma non salva nulla perchè tutti i campi sono vuoti.
Grazie
5.610 messaggi dal 09 febbraio 2002
Contributi
uhm, questa è tosta.
Hai provato a vedere con Firebug o con la console di sviluppo di IE9 (tasto F12) che dati vengono effettivamente inviati al server?

Gemini78 ha scritto:

A questo punto esegue il postback, esegue le query, ma non salva nulla perchè tutti i campi sono vuoti.

Però nel codice non vedo a quali campi ti riferisci. Vedo solo un campo hidden chiamato "hdIdColore" e poi nel javascript c'è un riferimento a "hdIdPlantare" che però manca.
Si può vedere online l'ouput html completo generato dalla pagina?

ciao

- So what you're saying is, if we get in trouble, there's no one to help us out?
- I'm afraid not.
- Fantastic!
650 messaggi dal 21 marzo 2008
non ho postato tutto il codice, ma ci sono delle textbox il cui contenuto salvo nel db.
Provo a controllare con firebug.
Il codice è tutto in locale ancora.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Ultimi messaggi
UTENTI ONLINE
In primo piano

I più letti di oggi

Media
In evidenza
MISC