122 messaggi dal 15 gennaio 2008
Salve a tutti,
ho una pagina asp.net nella quale ho un oggetto FileUpload per caricare dei file dul server.

sull'oggetto fileupload ho messo un controllo requiredfilevalidator per evitare che, alla pressione del pulsante "invia" parta il programma di upload del file.

Fin qui tutto ok.

Ho deciso di implementare una funziona javascipt che, alla pressione del pulsante "invia", durante il caricamento del file, mi nasconda tutta la pagina e mi visualizzi invece un messaggio di attesa.

Funziona tutto bene, tranne che per un particolare: se nell'oggetto FileUpload non ho ancora selezionate alcun file, quando premo "Invia" mi appare comunque il messaggio di attesa, nonostante la funzione di caricamento del file invece non sia stata avviata.

Dovrei pertanto, nella funzione javascipt, verificare se l'oggetto FileUpload abbia o meno un file selezionato, per decidere se far apparire il messaggio di attesa oppure no.

Vi posto qualche riga:
<script type="text/javascript"> 
    function fnAspetta() 
    {
    document.getElementById('attesa').style.display="block"; 
    document.getElementById('carica').style.display="none";
    } 
</script>

...
...
...
...
...

<asp:FileUpload ID="UploadIMG" runat="server" />

...
...
...

<asp:Button ID="invia_foto" runat="server" OnClick="invia_foto_Click"  OnClientClick="fnAspetta(false);" Text="-->INVIA FOTO<--" ValidationGroup="upload_foto" />



Grazie per l'aiuto :)
3.939 messaggi dal 28 gennaio 2003
quello di sotto è un esempio. Lo copio così come è. A te vedere se va.
In pratica, al click, controllo che l'utente abbia selezionato un file di dato tipo. Dopo di che disabilito la pagina mettendo un div semitrasparente grigio. Poi attivo un gif animato di attesa.
Lascia perdere i dettagli e prova ad estrarre quello che ti servi.
Ciao.
    <script language="javascript" type="text/javascript">
// <!CDATA[

function attesa()
{
    window.setTimeout(function()
        {
            disabilita_pagina(50);
            $('div_readonly').style.display='';
            var wh = ClientSize();
            var w = wh.width;
            var h = wh.height;
            $("div_readonly").style.top = Math.round((h -50)/2) + "px";
            $("div_readonly").style.left = Math.round((w -250)/2) + "px";
        }, 1);
}


function controlla_estensione(sender, args)
{
    var nomeFile = $("FileUpload1").value;
    if (nomeFile == "") return;
    // isolo l'estensione
    var extFile = nomeFile.substr(nomeFile.lastIndexOf(".") + 1);
    extFile = extFile.toLowerCase();
    // verifico che sia fra quelle permesse
    //var permesse = "#jpg#gif#png#JPG#GIF#PNG#";
    var permesse = "#jpg#";
    if (permesse.indexOf("#" + extFile + "#") == -1) 
    {
        args.IsValid = false;
    }  

}


// ]]>
</script>
</head>
<body>
    <form id="form1" runat="server">
        <h3>Upload con creazione miniature immagini</h3>
        <asp:FileUpload ID="FileUpload1" runat="server" onkeydown="this.blur();" size="100" style="border:1px black solid;" onchange="WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("LinkButton1", "", true, "", "", false, true));" />
        <br />
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="FileUpload1" ErrorMessage="Selezionare un file da spedire"></asp:RequiredFieldValidator>
        <br />
        <asp:CustomValidator ID="CustomValidator1" runat="server" ErrorMessage="Selezionare solo immagini jpg" ClientValidationFunction="controlla_estensione"></asp:CustomValidator>
        <br />
        <br />
        <asp:LinkButton ID="LinkButton1" runat="server" EnableViewState="false">Spedisci</asp:LinkButton>
        <br /><br />
        <asp:Label ID="Label1" runat="server" Text="" EnableViewState="false"></asp:Label>
        <hr />
        <asp:Literal ID="Literal1" runat="server" EnableViewState="false" />
        <div id="div_readonly" style="position:absolute; z-index:99999; left:100px;top:100px; width:250px; height:50px; background-color:White; border:10px red solid; padding:10px; text-align:center; display:none" >
            Prego attendere: operazione in corso...<br />
            <img alt="elaborazione in corso" src="../../immagini/pleasewait.gif" />
        </div>
        
    </form>
</body>
</html>
122 messaggi dal 15 gennaio 2008
in particolare mi sono saltati agli occhi questi due comandi:

var nomeFile = $("FileUpload1").value; 
    if (nomeFile == "") 


In teoria, con i cambiamente del caso, è esattamente quello che serve a me, trovare un modo per capire, tramite codice javascript, se è stato selezionato un file (indipendentemente dal tipo di file).
In pratica però non riesco a farlo funzionare. In questo caso la procedura carica il file normalmente, senza visualizzarmi il messaggio di attesa.

function fnAspetta() 
{ 
var check= $("UploadImg").value;
if (check!="")
 {
  document.getElementById('attesa').style.display="block"; 
  document.getElementById('carica').style.display="none";
 }
} 

Modificato da Yield il 06 ottobre 2008 00.00 -
3.939 messaggi dal 28 gennaio 2003
Vedo se riesco a spiegarmi:

1) $('attesa') è document.getElementById('attesa')

2)nella pagina c'è un div chiamato div_readonly, col messaggio "Prego attendere...", che è nascosto:

<div id="div_readonly" style="position:absolute; z-index:99999; left:100px;top:100px; width:250px; height:50px; background-color:White; border:10px red solid; padding:10px; text-align:center; display:none" >
Prego attendere: operazione in corso...<br />
<img alt="elaborazione in corso" src="../../immagini/pleasewait.gif" />
</div>


3) <asp:FileUpload ha due validatori, uno, RequiredFieldValidator, controlla che l'utente abbia scelto un file, l'altro è un CustomValidator e controlla che l'utente abbia scelto un file di estensione consentita.

Perciò, se non serve controllare l'estensione del file, serve solo il RequiredFieldValidator.

Nella funzione attesa, lascia solo $('div_readonly').style.display=''; che non fa altro che farti vedere il messaggio di attesa.

Ciao
122 messaggi dal 15 gennaio 2008
si, a me basta vedere sel il FileUpload contiene un valore e basta, gli altri controlli li faccio la asp.net. E' già presente in pagina un RequiredFieldValidator per il FileUpload, che lato asp.net fa il suo lavoro. Devo trovare il modo per far si che il messaggio di attesa appaia soltanto se, appunto, ci sia un valore nel FileUpload.

quindi se ho capito bene, mi basta fare:

function fnAspetta()
{
var check= document.getElementById('UploadImg').value;
if (check!="")
{
  document.getElementById('attesa').style.display="block";
  document.getElementById('carica').style.display="none";
}
} 


faccio qualche tentativo :)

EDIT: niente da fare, non va. Tra l'altro con firefox non riesco a capire se il javascript vada in errore....
Modificato da Yield il 06 ottobre 2008 09.53 -
17 messaggi dal 20 giugno 2006
Per evitare di caricare il file

script type="text/javascript">
function CaricaFile(){
if ($('UploadIMG').value == '')
return false;
else{
fnAspetta();
return true;
}
}
function fnAspetta()
{
document.getElementById('attesa').style.display="block";
document.getElementById('carica').style.display="none";
}
</script>

...

<asp:FileUpload ID="UploadIMG" runat="server" />

...

<asp:Button ID="invia_foto" runat="server" OnClick="invia_foto_Click" OnClientClick="CaricaFile();" Text="-->INVIA FOTO<--" ValidationGroup="upload_foto" />


Prova e fammi sapere se ho interpretato correttamente la tua richiesta
122 messaggi dal 15 gennaio 2008
si, hai capito perfettamente, ma continuo a non riuscire a farlo funzionare...
con Firefox come si intercettano gli errori javascipt???
Alternativamente potresti forzare la validazione client di ASP.NET, mi sembra una soluzione più consistente con la tua situazione.

Per farlo, ti è sufficiente scrivere questo codice per la tua fnAspetta:
function fnAspetta()
{
    if (typeof(Page_ClientValidate) == 'function')
    {
        var result = Page_ClientValidate();
        if (result)
        {
            // ... tuo codice qui ....
        }
    }
}


Let me know.

Ciao

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.