2009-12-10 3 views
1

J'écris une petite application dans ASP classique. J'ai une page qui a un formulaire, qui poste sur une deuxième page. Inclus avec le POST du formulaire, sont les téléchargements de fichiers, d'où la nécessité d'une méthode POST.La page ASP ne reçoit pas les paramètres POST

La deuxième page ne voit cependant AUCUN des champs envoyés par la première page. Appelant soit Request("param") ou Request.Form("param") tous les deux retournent simplement la chaîne vide.

Si je passe la méthode sur mon formulaire de POST GET (avec NO autres modifications), les valeurs sont bien repris par la page d'accueil, bien sûr je ne peux pas faire les téléchargements de fichiers, qui sont un partie cruciale de cette application.

En mode GET, les paramètres sont tous placés sur l'URL comme prévu. En mode POST, j'ai déclenché FireBug et examiné les données POST de ma requête. Le formulaire d'origine IS envoyant toutes les valeurs de la requête (elles apparaissent dans FireBug comme prévu), le problème semble donc se situer à la fin de la page de réception.

Le formulaire est soumis par le code, appelé à partir du bouton avec le onclick="javascript:saveMinutes();"

Ma forme et la fonction saveMinutes() sont déclarés comme suit:

<form id="frmMinutes" enctype="multipart/form-data" method="post" action="saveminutes.asp"> 
<table id="tblMinutes" style="width: 100%;"> 
    <tr> 
     <td> 
      <select id="selYear" name="year" size="13" onclick="javascript:setDatePickerRange(); checkForMinutes();"> 
       <%For lc = Year(Now) To getMinutesFirstYear() Step - 1%> 
        <option value="<%=lc%>" <%If lc = Year(Now) Then%>selected="selected"<%End If%>><%=lc%></option> 
       <%Next%> 
      </select> 
     </td> 
     <td> 
      <select id="selMonth" name="month" size="13" onclick="javascript:setDatePickerRange(); checkForMinutes();"> 
       <%For lc = 1 To 12%> 
        <option value="<%=lc%>" <%If lc = Month(Now) Then%>selected="selected"<%End If%>"><%=MonthName(lc)%></option> 
       <%Next%> 
      </select> 
     </td> 
     <td style="width: 100%; padding-left: 20px;"> 
       <table id="enterMinutes" style="width: 100%"> 
        <tr> 
         <th>Topic:</th> 
         <td><input id="topic" name="topic" type="text" maxlength="100" field="topic" /></td> 
        </tr> 
        <tr> 
         <th>Presenter:</th> 
         <td><input id="presenter" name="presenter" type="text" maxlength="100" field="presenter" /></td> 
        </tr> 
        <tr> 
         <th>Date:</th> 
         <td><input id="mtgdate" name="mtgdate" type="text" maxlength="10" class="datepick" field="mtgdate" readonly="readonly" /></td> 
        </tr> 
        <tr> 
         <th style="vertical-align: top;">Files:</th> 
         <td style="text-align: left;"> 
          <input id="file0" name="file0" type="file" size="35" /><span class="redEmphasis" style="margin: 0px 10px 0px 10px;">(.doc or .docx)</span><input type="button" value="+" onclick="javascript:addFileUpload();" /> 
         </td> 
        </tr> 
        <tr> 
         <th style="vertical-align: top;"></th> 
         <td style="text-align: left; padding: 10px 0px 10px 0px;"> 
          <input type="button" style="width: 100%" value="update minutes" onclick="javascript:saveMinutes();" /> 
         </td> 
        </tr> 
       </table> 
       <span id="warnexist" class="redEmphasis" style="display: none;">The selected month already has associated minutes(). doc files take precedence over docx.</span> 
     </td> 
    </tr> 
</table> 
</form> 

saveMinutes():

Lorsque votre from est codé en multipartie, vous ne pouvez pas obtenir les valeurs POST en tant que vieux paramètres simples.
function saveMinutes() { 
    if($('form#frmMinutes input[type=text]').filter(function() { return $(this).val() == '' }).length > 0) { 
     alert('Please enter all fields.'); 
     return; 
    } 

    if ($('form#frmMinutes input#file0').filter(function() { return !$(this).val().match(/.*\.docx?$/i) }).length > 0) { 
     alert('First file must be doc or docx.'); 
     return; 
    } 

    $('form#frmMinutes input[type=file]').filter(function() { return $(this).val() == '' }).next().remove(); 
    $('form#frmMinutes input[type=file]').filter(function() { return $(this).val() == '' }).remove(); 

    removeDupeFiles(); 

    // reindex file inputs after removing emptys/dupes 
    var fs = $('form#frmMinutes input[type=file]:gt(0)'); 
    for (lc = 1; lc <= fs.length; lc++) { 
     var fid = 'file' + new String(lc); 
     $(fs[lc-1]).attr('id', fid).attr('name', fid); 
    } 

    $('form#frmMinutes')[0].submit(); 
} 
+0

Si vous publiez le code que vous utilisez pour extraire les fichiers téléchargés, cela sera plus utile que ce que vous avez ici. Merci. –

+0

J'avais utilisé juste Request ("param"), j'avais complètement oublié les paramètres simples nécessaires pour être également analysé/décodé. J'ai une classe que j'ai téléchargé à utiliser pour les fichiers, je ne savais pas que je devais aussi l'utiliser pour les paramètres d'entrée simples. – eidylon

Répondre

5

Ce ne sont que des parties supplémentaires du formulaire en plusieurs parties.

Pour récupérer les fichiers téléchargés dans ASP, vous devez généralement faire une boucle dans les pièces et vérifier chacune d'elles pour voir s'il s'agit d'un fichier (et l'enregistrer si c'est le cas). Pour obtenir les valeurs du champ, vous devez ajouter à cette boucle pour vérifier chaque partie pour voir si elle a le nom d'une de vos valeurs de champ, puis récupérer la valeur. C'est une douleur à faire dans le code pur ASP, tant de gens utilisent un certain type de composant de téléchargement de fichier, auquel cas la récupération des valeurs de champ dépendra du composant.

Mais le message de base est le suivant: quelle que soit l'analyse du formulaire que vous effectuez pour extraire les fichiers, vous devez faire la même chose pour récupérer les valeurs des champs.

+0

C'était exactement ça; Merci!!!!! – eidylon

Questions connexes