2011-01-05 4 views
0

J'utilise Asp.net et l'exigence spécifie que j'utilise l'entrée html pour publier des fichiers sur le serveur plutôt qu'asp: fileupload. [Raison: Ajoutez plus de contrôles de fichiers d'entrée html similaires au gestionnaire de fichiers CPanel. lien ajoute une autre entrée de fichier à partir de laquelle l'utilisateur peut sélectionner un autre fichier * .Mais quand jamais je publie back La collection Request Files est toujours vide. * formulaire HTML:Entrées de fichiers multiples

<form method="post" enctype="multipart/form-data" action="documents.aspx"> 
<div> 
    <input type="file" name="attachment" id="attachment" onchange="validate(this)" /> 
    <span class="none">Filename should be within (1-25) letters long. Can Contain only letters 
     & numbers</span> 
    <div id="moreUploads"> 
    </div> 
    <div id="moreUploadsLink" style="display: none;"> 
     <a href="javascript:addFileInput();">Attach another File</a></div> 
     <input type="submit" id="btnSubmit" /> 
</div> 
</form> 

Javascript:

var upload_number = 2;function addFileInput() { 
try { 
    var fileUpload = document.getElementById("attachment"); 
    var elemSpan = nextElement(fileUpload).cloneNode(true); 
    var elemDiv = document.getElementById("moreUploads"); 
    var d = document.createElement("div"); 
    var file = document.createElement("input"); 
    file.setAttribute("type", "file"); 
    file.setAttribute("id", "attachment" + upload_number); 
    file.setAttribute("onchange", "validate(this)"); 
    d.appendChild(file); 
    d.appendChild(elemSpan); 
    elemDiv.appendChild(d); 
    upload_number++; 
} catch (err) { alert(err);}} 

la validate (ce) est une fonction qui valide les types de fichiers sur la validation client.When réussit alors le lien pour ajouter plus d'entrées de fichiers est activé . Quelqu'un pourrait-il jeter quelque chose à ce sujet?

+0

Est-ce que ce formulaire est INSIDE le tag de formulaire normal créé dans les pages ASP.NET? Cela signifie que vous avez un

qui se trouve dans le formulaire ci-dessus. – patmortech

+0

Non, cette page se trouve à l'intérieur de Content Place Holder [ce qui signifie que je suis sur une page enfant sur la page principale] – Deeptechtons

+0

Votre masterpage a probablement une étiquette de formulaire dessus. Si vous regardez dans la source html de la page Web, voyez-vous deux étiquettes de forme? – patmortech

Répondre

1

Je pense que vous devez définir l'attribut name des entrées. Ajouter ceci:

file.setAttribute("name", "attachment" + upload_number); 

Mise à jour

Un autre problème vous semblez avoir est que vous essayez d'imbriquer une balise de formulaire dans un autre (puisque votre masterpage aura typiquement une <form runat="server"> dans déjà). Vos mises en ligne ne fonctionneront pas dans cette situation car le formulaire principal n'a pas la bonne valeur d'enctype. Normalement, si vous utilisez le contrôle asp.net FileUpload, il définira automatiquement l'enctype approprié pour multipart/form-data sur la balise de formulaire principal pour vous. Cependant, comme vous n'utilisez que des entrées html, asp.net ne sait pas que vous essayez de télécharger des fichiers et ne définit donc pas l'enctype pour vous.

Donc ce que vous devez faire est:

a) se débarrasser de l'étiquette de formulaire que vous avez ci-dessus (ne ont pas besoin)

b) dans votre codebehind pour cette page, placez les éléments suivants ligne dans le gestionnaire pour l'événement page_init:

this.Form.Enctype = "multipart/form-data"; 
+0

Nope ne fonctionnait pas non plus. J'espère que j'ai bien expliqué mes besoins .. – Deeptechtons

+0

Essayez ce que j'ai ajouté dans la mise à jour. – patmortech

+0

Le formulaire sur ma page maître n'avait pas l'enctype. Cela a fixé l'univers pour moi :) Merci beaucoup –

Questions connexes