2015-12-08 11 views
12

Sto utilizzando un iframe per caricare un'immagine. Quindi ho due file: il file per l'iframe e il file che visualizzerà l'immagine. Quando il collegamento per visualizzare l'iframe viene cliccato questo codice viene eseguito:Impossibile trovare FileHiddenName da iframe

function ShowUploadImageOut(RecordID) { 
    $('#<%=hfPieceID.ClientID %>').val(RecordID); 
    $("#dvAddImageOutturn").html(
     '<iframe id="iframeUpload" src="utilities/UploadPOD.aspx?id=uploadOutturn"></iframe>' 
    ); 
} 

Sulla iframe è un pulsante di caricamento che salva l'immagine in una cartella sul computer e imposta il nome del file immagine per FileNameHidden

protected void btnUpload_Click(object sender, EventArgs e) 
{ 
    if (fuUpload.HasFile) 
    { 
     if (Request.QueryString["id"] == "uploadOutturn") 
     { 
      String Path = ConfigurationManager.AppSettings["PieceOutturnFolder"].ToString() 
       + Company.Current.CompCode; 
      string FileName = fuUpload.FileName; 

      if (File.Exists(Path + "/" + FileName)) 
      { 
       File.Delete(Path + "/" + FileName); 
      } 

      fuUpload.SaveAs(Path + "/" + FileName); 
      filename = FileName; 
      imgTemp.ImageUrl = "/thumbnail.ashx?ImgFilePath=" + Path.Replace("/", "\\") 
       + "\\" + FileName + @"&width=200&height=400"; 
      FileNameHidden.Value = FileName; 
     } 
    } 
} 

FileNameHidden ha la proprietà clientidmode insieme a "static":

<input type="hidden" id="FileNameHidden" runat="server" clientidmode="Static" /> 

Ritornare alla pagina per la visualizzazione th L'immagine è un pulsante Salva. Questo pulsante prende il valore da FileNameHidden e lo imposta in un campo nascosto. Questo nuovo campo nascosto viene utilizzato per salvare il nome del file al database:

<asp:HiddenField ID="hfUploadedPieceHubImageFile" runat="server" /> 

<div id="dvAddEditImageOutturn" class="dvdraggable"> 
    <div id="dvAddImageOutturn"></div> 

    <asp:LinkButton ID="btnPieceHubUpdateImage" 
     onclick="btnUpdatePieceImage_Click" 
     OnClientClick="CloseUploadWindow();return GetPieceOutturnFilename();" 
     CssClass="btnSaveSmall" 
     runat="server" 
    ></asp:LinkButton> 
</div> 

function GetPieceOutturnFilename() { 
    if ($('#iframeUpload').contents().find('#FileNameHidden').length > 0) { 
     $("#<%= hfUploadedPieceHubImageFile.ClientID %>").val(
      $('#iframeUpload').contents().find('#FileNameHidden').val() 
     ); 
    } 
    return true; 
} 

Il problema è nella funzione GetPieceOutturnfile. $('#iframeUpload').contents().find('#FileNameHidden').length è sempre zero. Dovrebbe trovare il numero FileNameHidden dall'iframe.

Andando attraverso il codice posso vedere FileNameHidden sicuramente viene impostata il nome dell'immagine:

<input name="FileNameHidden" type="hidden" id="FileNameHidden" value="test.jpg"> 

Quindi non capisco perché si dice la lunghezza è pari a zero

risposta

6

Il problema era con il btnPieceHubUpdateImage per la onClientClick:

OnClientClick="CloseUploadWindow(); 
return GetPieceOutturnFilename();" 

che stava chiudendo la finestra prima poi cercando di salvare il FileNameHidden dal Iframe. Scambiare questi intorno così chiama GetPieceOutturnFileName prima risolto il problema.

3

ho ottenuto che funziona con questo codice Assicurati che il contenuto caricato nell'iframe (child.html) si trovi nello stesso dominio o che non funzioni per motivi di sicurezza. Inoltre, non funzionerà con i file sul desktop. Devono essere serviti da un server.

index.html

<!DOCTYPE html> 
<html> 
<head> 
    <script src="https://code.jquery.com/jquery-1.11.3.js"></script> 
    <script> 
    $(document).ready(function() { 
     $("#iframeUpload").load(function() { 
     var fileName = $(this).contents().find("#FileNameHidden").val(); 
     console.log(fileName); 
     }); 
    }); 
    </script> 
</head> 
<body> 
    <iframe id="iframeUpload" src="child.html" /> 
</body> 
</html> 

child.html

<!DOCTYPE html> 
<html lang="en"> 
    <head></head> 
    <body> 
    <form> 
     <input name="FileNameHidden" type="hidden" id="FileNameHidden" style="display:none" value="test.jpg"> 
    </form> 
    </body> 
</html> 

Se questo non aiuta a risolvere il problema, è necessario fornire i file o un jsfiddle.

+1

ok Ho provato a modificare la funzione GetPieceOutturnFileName sul codice ma non entra nel '$ (" # iframeUpload "). Load (function() {' quindi vuol dire che non sta trovando l'iframe? Ho aggiunto il modifica Ho apportato la funzione alla mia domanda – user123456789

+1

La funzione di caricamento era un requisito del mio esempio di base. Senza caricare il fileName restituirebbe null perché i contenuti iframe sarebbero ancora in fase di caricamento quando è stato chiamato. È difficile per me dire come l'applicazione funziona esaminando i frammenti di codice casuali nella tua domanda.Se potresti fornire un collegamento a una versione di base della tua applicazione, sarebbe molto più facile per le persone diagnosticare il tuo problema. –

+1

@ user123456789 Ho dato un'occhiata ai file .C'è molto in là e non ero in grado di eseguirlo a causa di non avere le dipendenze richieste. Ti suggerirei di semplificare lo scenario creando una versione html di base della pagina con cui stai riscontrando un problema. Mantieni solo la funzionalità che stai cercando di eseguire il debug. Simile alla mia risposta sopra. Se riesci a far si che il problema si verifichi in un jsfiddle funzionante, la gente probabilmente capirà subito il problema. –